2016-04-01 8 views
2

sympyを使用して、いくつかのシンボリック計算をPythonで実行しようとしています。したがって私はいくつかのスカラー記号と行列記号を定義します。しかし、コンソールの印刷出力はむしろ醜いので、もっとコンパクトにしたいと思っています。具体的には、スカラーシンボルdtがあります。このスカラーシンボルは、マトリックスFdに接続されています。転記をFdと印刷すると、dtを含むエントリはtranspose(dt)と表示されます。ここに私のコードです:シンボルがスカラーのときにsympy出力のシンボルの転置を抑制する

#!/usr/bin/python 
from sympy import * 

dt = Symbol('dt') 

A = MatrixSymbol('A',3,3) 
B = MatrixSymbol('B',3,3) 
C = MatrixSymbol('C',3,3) 
D = MatrixSymbol('D',3,3) 
E = MatrixSymbol('E',3,3) 
F = MatrixSymbol('F',3,3) 
Ct = MatrixSymbol('Ct',3,3) 
I = Identity(3) 
O = ZeroMatrix(3,3) 

Fd = BlockMatrix([[I, dt*I, A, B, -Ct*(dt*dt)/2], [O, I, C, D, -Ct*dt], [O, O, E, F, O], [O, O, O, I, O], [O, O, O, O, I]]) 
print "=======================" 
print "Fd = " 
print Fd 
print "=======================" 

Fdt = Fd.T 
print "=======================" 
print "Fdt = " 
print Fdt 
print "=======================" 

そして、これが出力されます。

======================= 
Fd = 
Matrix([ 
[I, dt*I, A, B, (-dt**2/2)*Ct], 
[0, I, C, D,  (-dt)*Ct], 
[0, 0, E, F,    0], 
[0, 0, 0, I,    0], 
[0, 0, 0, 0,    I]]) 
======================= 
======================= 
Fdt = 
Matrix([ 
[      I,     0, 0, 0, 0], 
[     (dt*I)',     I, 0, 0, 0], 
[      A',     C', E', 0, 0], 
[      B',     D', F', I, 0], 
[(-transpose(dt)**2/2)*Ct', (-transpose(dt))*Ct', 0, 0, I]]) 
======================= 

は、私は(私はいくつかのより多くの行列の乗算を行いますので)よりコンパクトな出力を持つようにしたい、dtが実際として認識されていますスカラーシンボル(したがって、転置は印刷されません)。誰かがこれを行う方法の手がかりを持っていますか?

答えて

2

実際、一般的なsympyオブジェクトは、その転置と等しいとは知られていません。あなたはdtは実数または複素数のスカラーとして扱われるようにしたい場合は、そのようなことを宣言します

dt = Symbol('dt', real=True) 

または

dt = Symbol('dt', complex=True) 

を次に、出力に代わりtranspose(dt)dtを持っています。

参考:確かにassumptions

+0

、設定は '複雑= true'には、それが動作します。これは望ましくない動作のようです。私は[問題を開いた](https://github.com/sympy/sympy/issues/10959)。 – asmeurer

関連する問題