上下文:我正在做一堆模拟,需要我实现不同的哈密顿量。这些哈密顿量只是矩阵,由一些常见元素的Kronecker积构成,还有一些我必须根据系统参数计算的前置因子。E、 g,在Kronecker产品中使用⊗
H=w1(a,b,c)*sigmax⊗I+w2(x,y,z)*I⊗sigmay
我希望我能做一个简单的解析器,能读入a,b,c,x,y,z的值和哈密顿量的表达式,并构造必要的矩阵。sypy似乎是一个很明显的候选对象,但我无法使用字符串获得一个矩阵表达式。在
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()
会有用的。但是,试着
^{pr2}$或者
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,所以我很清楚我可能遗漏了一些东西。在
让我们看看在更简单的情况下发生了什么:
看起来
^{pr2}$simpify
不明白X1
是一个矩阵。所以,如果我们明确地提出来,一切都会好起来的:最后陈述:
怎么回事?如果你读Basics of expressions in SymPy,你会发现“矩阵不可共化”的语句,
simpify
将X1
解释为一个符号。 很难说在其他情况下该怎么做。docs中有警告:相关问题 更多 >
编程相关推荐