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)
シンボリックな配列に代入したい時
syms x(t) y(t)
q = [x y]
q(1)
これ、世間のつよつよ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)
を付けておらず、付けたらうまくいきました。
高専の卒業研究のころにも同じようなことで困って、その時は結局解決できなかったので別々に定義して計算した気がします。