LoginSignup
1
0

MATLABでシンボリック配列の参照x(1)と代入x(1)に悩まされた話

Last updated at Posted at 2024-07-01

MATLAB R2024aでやってます。おかしなところがあれば教えてください...

軽い背景説明

タイトルだけ見ると何言ってんだという感じですね。
ある配列の1つ目の要素が欲しいときにq(1)と書いたら、そうではなく$\boldsymbol{q}(t)|_{t=1}$が返ってきた、なんでや!というお話です。

結論

配列の定義の時に、tの関数なら(t)を付けておけば、n個目の要素を指定できる。
付けないと代入になっちゃう。

シンボリックな配列から要素を抜き出したい時

syms x(t) y(t)
q = [x(t) y(t)]
q(1)

image.png

シンボリックな配列に代入したい時

syms x(t) y(t)
q = [x y]
q(1)

image.png
これ、世間のつよつよMATLABユーザーたちは普通に使い分けているのだろうか...

背景

ラグランジュの運動方程式の計算を格好良くやろうとした際に、

\frac{d}{dt} \frac{\partial L}{\partial \dot{q_i}} 
- \frac{\partial L}{\partial q_i} 
+ \frac{\partial D}{\partial \dot{q_i}}
= F_i

この計算を

L = T - U            % ラグランジアン(Tは運動エネルギー、Uは位置エネルギー)
q = [x(t); theta(t)] % 一般化座標
dq = diff(q,t)
F = [u(t); 0]        % 一般化力

eqn = sym(zeros(2,1))
for i = 1:2
    eqn(i) = diff(diff(L,dq(i)),t) - diff(L,q(i)) - F(i)
end

こうやりたかったんです。最初は一般化座標の定義のところに(t)を付けておらず、付けたらうまくいきました。
高専の卒業研究のころにも同じようなことで困って、その時は結局解決できなかったので別々に定義して計算した気がします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0