変数が時間の関数であることをSymPyに伝える方法は?

Nov 26 2020

私はそのような3D回転行列を持っています:

R = sp.Matrix([
    [ sp.cos(q1 + q2),  -sp.sin(q1 + q2), 0],
    [-sp.sin(q1 + q2),   sp.cos(q1 + q2), 0],
    [               0,                 0, 1]
])

ここで、q1とq2は角度です。そのうちの1つ、q2(t)は時間の関数であり、変化します。どうすればそれをsympyに伝えることができますか?

そのマトリックスを時間の経過とともに区別したいのですが、その方法がわかりません。

それが私がすべてを宣言した方法です:

q1, q2, t = sp.symbols('q1 q2 t', real=True)


R = sp.Matrix([
    [ sp.cos(q1 + q2),  -sp.sin(q1 + q2), 0],
    [-sp.sin(q1 + q2),   sp.cos(q1 + q2), 0],
    [               0,                 0, 1]
])

sp.diff(R, t)

それは私が得た出力ですsp.diff(R, t)

Rからの差分を(tで)手動で計算したので、SymPyで次のようなものを取得したいと思います。

回答

1 wsdookadr Dec 04 2020 at 23:15

を未定義の関数として宣言しq1、ポイントで計算されq2R行列でそれらを使用する必要がありtます。

import sympy as sp

t = sp.symbols('t', real=True)
q1 = sp.Function('q_1')
q2 = sp.Function('q_2')

R = sp.Matrix([
    [ sp.cos(q1(t) + q2(t)),  -sp.sin(q1(t) + q2(t)), 0],
    [-sp.sin(q1(t) + q2(t)),   sp.cos(q1(t) + q2(t)), 0],
    [               0,                 0, 1]
])

sp.diff(R, t)

SymPy1.7の結果は次のとおりです。