【发布时间】:2016-05-25 15:47:47
【问题描述】:
上下文:我正在做一堆模拟,需要我实现不同的哈密顿量。这些哈密顿量只是矩阵,由一些常见元素的 Kronecker 乘积构成,并带有一些我必须根据系统参数计算的前因数。例如,将⊗用于 Kronecker 产品
H = w1(a,b,c) * sigmax ⊗ I + w2(x,y,z)*I ⊗ 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,所以我很清楚我可能只是遗漏了一些东西。
【问题讨论】:
-
在 Sympy 中没有名为
MatrixExp的方法或类。存在类MatrixExpr,但它是矩阵表达式的超类。 -
对不起,MatrixExpr 正是我的意思
-
所以,如前所述,
MatrixExpr是矩阵类的超类。它只表示抽象矩阵。你不应该使用它。 -
好的,我将编辑问题以反映这一点;仅对表达式字符串使用 sympify 调用的结果也不能达到我想要或期望的效果
-
好的,你的第一个代码块给出了一个对称矩阵。它给出了正确的结果吗?
标签: python matrix simulation sympy