2017-11-11 2 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は、数値計算にSymPyが使用するmpmathライブラリに属します。これは数値行列に対してのみ機能します。

symPyはmatrix exponentiationexpを使用します。マトリックスのexpの出力はできるだけ複雑なので、simplifyと一緒に使用することをお勧めします。簡略化された結果は、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)]]) 

1は、EXP(A)のための級数の部分和を計算することを希望する場合で、それを行う方法は

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

ためではありません特定の値を差し込む前に、Aをのsymbolicの電源nに上げようとします。行列を象徴的な力にすることは、可逆的なAに対してのみ実行されます。それは非可逆的なもののために何をすべきか想像するのは難しいです。その代わり、initial value of the accumulatorとしてそれをゼロ行列を与えて、Pythonのsumを使用します。

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

ありがとうございました!私はまだ不思議です、なぜ合計がうまくいかなかったのですが、expは正確に仕事をします!ニース!私はsympyを愛しています! – mike

+0

2つの説明に非常にうれしい!ここで学ぶのは大変!とても有難い! – mike

関連する問題