我试图评估最常见的3D旋转矩阵的偏导数,如下所示:
phi, psi, theta = sympy.symbols("phi, psi, theta")
RMatrixPhi = sympy.Matrix([[cos(phi), sin(phi), 0],
[-sin(phi), cos(phi), 0],
[0, 0, 1]])
RMatrixPsi = sympy.Matrix([[cos(psi), 0, sin(psi)],
[0, 1, 0 ],
[-sin(psi), 0, cos(psi)]])
RMatrixTheta = sympy.Matrix([[1, 0, 0 ],
[0, cos(theta), sin(theta)],
[0, -sin(theta), cos(theta) ]])
RMatrix = RMatrixPhi * RMatrixPsi * RMatrixTheta
D = diff(RMatrix, phi)
但是,D
是一个sympy.Derivative
对象,我无法对其进行评估,
它只是打印出Derivative(Matrix(...))
我能让它发挥作用的唯一方法是写作
sympy.Matrix([sympy.diff(r, phi) for r in RMatrix]).reshape(3,3)
但这看起来很难看。什么是计算这种衍生物的正确方法?
答案 0 :(得分:3)
Matrix类有一个名为diff
的方法,根据文档......
文档字符串: 计算矩阵中每个元素的导数。
所以使用
RMatrix.diff(phi)
执行元素推导。