Оценка коммутатора в sympy.physics.secondquant - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь символически вычислить коммутаторы операторов создания и уничтожения из пакета 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...