矩阵导数没有得到评估

时间:2015-04-06 10:10:43

标签: matrix sympy

我试图评估最常见的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)

但这看起来很难看。什么是计算这种衍生物的正确方法?

1 个答案:

答案 0 :(得分:3)

Matrix类有一个名为diff方法,根据文档......

  

文档字符串:   计算矩阵中每个元素的导数。

所以使用

RMatrix.diff(phi)

执行元素推导。