コンテキスト:私はさまざまなハミルトニアンを実装するために必要なシミュレーションを行っています。これらのハミルトニアンは、いくつかの一般的な要素のクロネッカー製品から構築された行列であり、システムパラメータに基づいて計算しなければならないいくつかの前触れです。例えば、クロネッカー積ため⊗使用文字列からの行列式
のH = W1が(A、B、C)* SIGMAX⊗Iは(X、Y、Z)W2を+ *私は作ることができる期待していた
sigmay⊗ a、b、c、x、y、zの値とハミルトニアンの式を読み取ることができ、必要な行列を構成する単純なパーサーです。 Sympyは明らかな候補のようですが、文字列を使って構築する行列式を得ることはできません。
from sympy import symbols,Matrix,MatrixSymbol
from sympy.physics import msigma
from sympy.physics.quantum import TensorProduct
w1,w2 = symbols('w1 w2')
X1 = MatrixSymbol('X1',4,4)
X2 = MatrixSymbol('X2',4,4)
x = msigma(1)
x_1 = TensorProduct(eye(2),x)
x_2 = TensorProduct(x,eye(2))
exp = w1*X1 + w2*X2
exp.subs([(w1,0.5),(w2,2),(X1,x_1),(X2,x_2)]).as_explicit()
となります。しかし、
exp = MatrixExpr('w1*X1+w2*X2')
または
exp = MatrixExpr(sympify('w1*X1+w2*X2'))
あるいは
exp = sympify('w1*X1 + w2*X2')
exp.subs([(w1,0.5),(w2,2),(X1,x_1),(X2,x_2)])
をしようとすることはしません。 w1
またはw2
をMatrixSymbol
の1x1インスタンスに変更すると、この機能も無効になります。
私はここで間違っていますか?これはsympyを初めて使用したので、私は何かが欠落している可能性が非常に高いことは明らかです。
「MatrixExp」という名前のメソッドまたはクラスはありません。クラス 'MatrixExpr'が存在しますが、それはMatrix ExpressのSuperClassです。 –
申し訳ありませんが、MatrixExprは私が正確に意味していたものです – Padraic
だから、言及したように、 'MatrixExpr'はマトリックスクラスのスーパークラスです。それは単に抽象行列を表します。あなたはそれを使うべきではありません。 –