我试图从sympy.physics.secondquant包中象征性地计算产生和湮灭算符的交换子。我的特殊问题是,我不能从换向器和手工计算中得到相同的输出,也不能得到简化表达式的sympy。我研究python3.7.1
和sympy1.3
。你知道吗
如果提供了两个以上的创建/湮灭运算符,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。(我试过使用simplify,但没用)。你知道吗
在我的用例中,我想计算
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)
。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐