如何告诉 SymPy 变量是时间的函数?
How to tell SymPy that a variable is a function of time?
我有一个 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 是角度。其中之一,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 中得到这样的东西:
您需要将q1
和q2
声明为未定义函数,然后在t
点计算的R
矩阵中使用它们。
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)
SymPy 1.7 给出的结果是这样的:
我有一个 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 是角度。其中之一,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 中得到这样的东西:
您需要将q1
和q2
声明为未定义函数,然后在t
点计算的R
矩阵中使用它们。
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)
SymPy 1.7 给出的结果是这样的: