Я пытаюсь символически вычислить коммутаторы операторов создания и уничтожения из пакета sympy.physics.secondquant .Моя конкретная проблема заключается в том, что я не могу получить одинаковые результаты от Commutator и от вычислений вручную, и я не могу понять, как упростить выражения.Я работаю на python 3.7.1
и sympy 1.3
.
. Commutator возвращает выражение без оценки, если предусмотрено более двух операторов Creation / Annihilation.В этом случае нам нужно оценить такую вещь с помощью функции .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)
Я не могу понять, как разобраться, чтобы упростить это выражение до 1. (Я пытался использовать упрощение, это не сработало).
В моем сценарии использования я хотел вычислить
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)
.