2016-01-05 12 views
6

こんにちは私は行列の乗算を行い、後で展開しようとしています。しかし、sympyは行列方程式の拡張をサポートしていないようです。例えば 行列のルンゲ・クッタ4:結果とsympyで行列式を展開する方法

A,x,dt = symbols('A x dt') 
k1 = A*x 
k2 = A*(x+k1*dt*S(1)/2) 
k3 = A*(x+k2*dt*S(1)/2) 
k4 = A*(x+k3*dt) 
final = x+dt*(S(1)/6)*(k1+k2+k3+k4) 
collect(expand((final)),x) 

from sympy import init_session 
init_session() 
from sympy import * 

A = MatrixSymbol('A', 3, 3) 
x = MatrixSymbol('x', 3, 1) 
dt = symbols('dt') 

k1 = A*x 
k2 = A*(x + S(1)/2*k1*dt) 
k3 = A*(x + S(1)/2*k2*dt) 
k4 = A*(x + k3*dt) 
final = dt*S(1)/6*(k1 + 2*k2 + 2*k3 + k4) 
final.expand() 

私は表現がちょうどスカラーバリアントのように展開されることを願って

Traceback (most recent call last) 
<ipython-input-38-b3ff67883c61> in <module>() 
    12 final = dt*1/6*(k1+2*k2+2*k3+k4) 
    13 
---> 14 final.expand() 

AttributeError: 'MatMul' object has no attribute 'expand' 

結果と

x*(A**4*dt**4/24 + A**3*dt**3/8 + A**2*dt**2/3 + 2*A*dt/3 + 1) 

同様に行列式を変更できますか?

ニコグアロの答えはエラーを取り除きますが、表現全体を1つのマトリックスに展開します。スカラーの例で説明したように、私が探しているものではない

+0

これは動作するはずです。私はhttps://github.com/sympy/sympy/issues/10360を開いた。 – asmeurer

答えて

0

マトリックス式を展開できると思います。しかし、あなたが持っているものは行列ではなく、2つの記号行列(Matsymbols)の乗算です。式を行列にすると、必要な展開が得られます。以下の余分な行を参照してください

from sympy import init_session 
init_session() 
from sympy import * 

A = MatrixSymbol('A', 3, 3) 
x = MatrixSymbol('x', 3, 1) 
dt = symbols('dt') 

k1 = A*x 
k2 = A*(x + S(1)/2*k1*dt) 
k3 = A*(x + S(1)/2*k2*dt) 
k4 = A*(x + k3*dt) 
final = dt*S(1)/6*(k1 + k2 + k3 + k4) 
Matrix(final).expand() 
+0

あなたにお答えいただきありがとうございます!これは実際にはエラーは出ませんが、私が探しているものではありません。式を簡略化し、展開し、スカラー変数として収集することを願っています問題の変形) –

関連する問題