我正在尝试从sympy.physics.secondquant包中象征性地计算创建和an灭运算符的交换子。我的特殊问题是,我无法从换向器和手动计算中获得相同的输出,也无法获得sympy来简化表达式。我使用python 3.7.1
和sympy 1.3
。
如果提供了两个以上的Creation / Annihilation运算符,则Commutator返回未求值的表达式。在这种情况下,我们需要使用.doit()
函数来评估这种情况。但是我似乎无法让.doit()
正常工作。
例如:
from sympy.physics.secondquant import Commutator, B, Bd
Commutator(B(0), Bd(0))
>>> 1
但这应该与以下内容相同:
(B(0) * Bd(0) - Bd(0) * B(0)).doit()
>>> AnnihilateBoson(0)*CreateBoson(0) - CreateBoson(0)*AnnihilateBoson(0)
我似乎无法弄清楚如何使sympy将该表达式简化为1。(我尝试使用simple,它没有用)。
在我的用例中,我想计算
Commutator(B(0), Bd(0) ** 2)
>>>Commutator(b(0),CreateBoson(0)**2)
由于某种原因,其中B(0)在输出中变为b(0)!
应用.doit()
会产生>>>AnnihilateBoson(0)*CreateBoson(0)**2 - CreateBoson(0)**2*AnnihilateBoson(0)
,而不是简化为2*AnnihilateBoson(0)
。