2017-11-11 126 views
0

我想找到了,如果我能以某種方式找到一種封閉形式的符號矩陣指數矩陣:Sympy符號矩陣指數

n=3; 
a = symbols(['a'+str(1+k) for k in range(n)], real=True); 
Ts = symbols('T_s',real=True,positive=True); 
A = Matrix([zeros(1,n),eye(1,n),a]) 

然而

expm(A) 

似乎不工作,「TypeError:無法創建mp1從a1」! 後來我試着用級數展開得到的估計,但再次:

Sum(A**n, (n, 0, 1)) 

給出了: 「ValueError異常:矩陣DET == 0;不可逆」。我想他們試圖通過古蘭經塊來獲得矩陣的力量,而我的結構對此並不好。我怎麼能繼續? A**2可以計算,但是A**1A**0的總和不??

回答

1

方法expm屬於mpmath庫,由SymPy用於數值計算。它只適用於數值矩陣。

SymPy使用exp代替matrix exponentiation。我建議將它與simplify一起使用,因爲exp的輸出對於您的矩陣比它可能更復雜。簡化的結果,simplify(exp(A)),是

Matrix([ 
[           1,     0,  0], 
[           1,     1,  0], 
[(-a2*a3 + (a1*a3 + a2)*(exp(a3) - 1))/a3**2, a2*(exp(a3) - 1)/a3, exp(a3)]]) 

如果希望計算冪級數的部分和用於EXP(A),這樣做的方式是不

Sum(A**n/factorial(n), (n, 0, 5)) 

因爲上述將嘗試在插入特定值之前將A提升至符號的功率n。將矩陣提升爲符號能力僅用於可逆A;很難想象它對於不可逆的應該是什麼。相反,使用Python的sum,給它一個零矩陣作爲initial value of the accumulator

sum([A**n/factorial(n) for n in range(6)], zeros(*(A.shape))) 
+0

非常感謝!我仍然想知道,爲什麼這個總和沒有奏效,但是這個工作確實完成了!太好了!我越來越喜歡sympy! – mike

+0

非常高興爲2個解釋!很多要在這裏學習!非常感激! – mike