2013-07-24 42 views
1

我有一個MutableDenseMatrix,Qtheta1theta2是SymPy類型symbol在symPy中inv()未返回正確的值

In[12]: Q 
Out[12]: [cos(theta1), -sin(theta1), 0, 0] 
     [sin(theta1), cos(theta1), 0, 0] 
     [   0,   0, 1, 980] 
     [   0,   0, 0, 1] 

當我叫倒數,我得到:

In[13]: Q_inv=Q.inv() 
Out[13]: [-sin(theta1)**2/cos(theta1) + 1/cos(theta1), sin(theta1), 0, 0] 
     [        -sin(theta1), cos(theta1), 0, 0] 
     [           0,   0, 1, -980] 
     [           0,   0, 0, 1] 

什麼時候我應該得到的是:

Out[X]: [cos(theta1), sin(theta1), 0, 0] 
     [-sin(theta1), cos(theta1), 0, 0] 
     [   0,   0, 1, -980] 
     [   0,   0, 0, 1] 

上什麼可能是錯誤怎麼回事有什麼想法?

回答

5

這沒有什麼錯。在您的第一個矩陣條目中,您的輸出中有-sin(theta1)**2/cos(theta1) + 1/cos(theta1),預期結果中有cos(theta1),實際上,由於1 - sin(theta1)**2 = cos(theta1)**2由標準三角函數標識等價。

sympy有一個叫做trigsimp的函數,它會將公式簡化爲你想要的形式。

>>> Q 
[cos(theta1), -sin(theta1), 0, 0], 
[sin(theta1), cos(theta1), 0, 0], 
[   0,   0, 1, 980], 
[   0,   0, 0, 1] 
>>> Q.inv() 
[-sin(theta1)**2/cos(theta1) + 1/cos(theta1), sin(theta1), 0, 0], 
[        -sin(theta1), cos(theta1), 0, 0], 
[           0,   0, 1, -980], 
[           0,   0, 0, 1] 
>>> 
>>> sympy.trigsimp(Q.inv()) 
[ cos(theta1), sin(theta1), 0, 0], 
[-sin(theta1), cos(theta1), 0, 0], 
[   0,   0, 1, -980], 
[   0,   0, 0, 1] 
+0

非常感謝。我已經評估了excel的差異,他們出現了不同,肯定是抄襲了錯誤。 – Chris