Симпи: заменить символической бозонной коммутации ее числовое значение - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы упростить выражения с участием бозонных коммутаторов, используя sympy. Проблема заключается в том, что, используя secondquant in sympy, числовые значения бозонного коммутатора [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

Я пробовал код, упомянутый здесь Как использовать 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)

Кроме того, я нашел этот связанный без ответа вопрос: Дает ли sympy неверные результаты для второго коммутатора квантования?

Я осмотрел строку 1682 здесь: https://github.com/sympy/sympy/blob/master/sympy/physics/secondquant.py и в соответствии с этим коммутатор должен правильно дать дельту Кронекера. Тем не менее, я все еще получаю символическое выражение, указанное выше.

1 Ответ

0 голосов
/ 13 ноября 2018

Проблема вызвана

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())
...