【发布时间】:2016-06-23 00:46:06
【问题描述】:
我正在准备如何使用极坐标/笛卡尔参数化的变换来得出雅可比矩阵的示例。我的问题是双重的。首先,我想知道如何强制 sympy 在替换后取消条款。 这两个矩阵是:
J1 = Matrix([[(r*cos(theta)).diff(r), (r*cos(theta)).diff(theta)],[(r*sin(theta)).diff(r),(r*sin(theta)).diff(theta)]])
J2 = Matrix([[((x**2+y**2)**(1/2.)).diff(x),((x**2+y**2)**(1/2.)).diff(y)],[atan(y/x).diff(x),atan(y/x).diff(y)]])
#substitute for x,y to have same variables for J1 and J2
J2 = trigsimp(J2.subs({x:r*cos(theta), y:r*sin(theta)}))
J2
我预计使用 cancel(),甚至 evalf() 会删除 r/(r^2)^1/2= 1 项,但它没有。
第二,如何或者可以需要 sympy 来识别简单的身份,在这种情况下 sin^2+cos^2 = 1?这样结果就是 J1*J2 的评估单位矩阵。
这有效,根据文档:
simplify(r/(r**2)**(1/2)*(sin(theta)**2+cos(theta)**2))
这个等价(ish)方程没有。
J = J1*J2
simplify(J[0,0])
似乎第二个错误是第一个错误的结果。
【问题讨论】:
标签: trigonometry sympy