SYMPY:代替符号玻色子换向其数值

时间:2018-11-12 19:57:27

标签: python physics sympy mathematical-expressions commutativity

我想使用sympy简化涉及玻色子换向器的表达式。 问题在于,在sympy中使用secondquant时,玻色子换向器[b_0,b ^ \ dagger_0] = 1和[b_0,b ^ \ dagger_1] = 0的数值永远不会替换为符号表达式。 换句话说,我希望SymPy知道换向器的身份。

以下代码

from sympy import simplify
from sympy.physics.secondquant import Bd, B 
from sympy.physics.quantum import *
comm1=simplify(Commutator(B(0),Bd(0)).doit())
print(comm1)
comm2=simplify(Commutator(B(0),Bd(1)).doit())
print(comm2)

给予

comm1= AnnihilateBoson(0)*CreateBoson(0) - CreateBoson(0)*AnnihilateBoson(0)
comm2= AnnihilateBoson(0)*CreateBoson(1) - CreateBoson(1)*AnnihilateBoson(0)

代替期望值:

comm1= 1
comm2= 0

我尝试了How to use sympy.physics.quantum Commutator?

中提到的代码
comm2=(Commutator(B(0),Bd(0))._eval_expand_commutator()).doit()
print('comm2=',comm2)

但这给出了与以前相同的表达方式

comm2= AnnihilateBoson(0)*CreateBoson(0) - CreateBoson(0)*AnnihilateBoson(0)

此外,我发现了这个相关的未解决问题: Does sympy give me wrong results for the second quantization commutators?

我在这里浏览了1682行: https://github.com/sympy/sympy/blob/master/sympy/physics/secondquant.py 并据此,换向器应正确给出克罗内克增量。但是,我仍然得到上面报告的符号表达。

1 个答案:

答案 0 :(得分:0)

问题是由

引起的
from sympy.physics.quantum import *

此代码给出了预期的行为

from sympy.physics.secondquant import *
from sympy import symbols
a, b = symbols('a,b')
c = Commutator(B(a),Bd(a))
print(c.doit())