Я хочу выработать некоторые манипуляции с коммутаторами и нашел этот инструмент в sympy. Кажется, он работает как ожидалось (но документация практически не существует или, по крайней мере, я нашел мало, но см. Комментарий Далтона Бентли ниже), но я столкнулся с следующей проблемой.Как использовать sympy.physics.quantum Commutator?
from sympy.physics.quantum import Commutator as Comm
from sympy.physics.quantum import Operator
A = Operator('A')
B = Operator('B')
C = Comm(Comm(Comm(A,B),A),B)
D = Comm(Comm(Comm(A,B),B),A)
E = (C-D).expand(commutator=true)
E
>>> [[[A,B],A],B] - [[[A,B],B],A]
вместо ожидаемого результата простого 0
(так как [[[А, В], А], В] = [[[А, В], В], А]). Итак, как я могу заставить более простой результат без оценки коммутаторов (т. Е. Без вызова функции doit()
)? Отметьте, что
simplify(E.doit())
>>> 0
дает желаемый результат.
Почему вызывающий 'Doit()' вопрос? Как правило, SymPy является консервативным с автоматическим упрощением, поскольку упрощение может быть очень дорогостоящим (а стоимость, как правило, трудно предсказать априори). EDIT: Или вы хотите научить SymPy об идентичности коммутатора? –
@BjoernDahlgren Я хочу знать ответ в неоценимом контексте, то есть я хочу выражение коммутатора. Упрощение в неоцененном контексте должно получиться равным нулю для результата выше. – Walter
Я вижу, что я могу сказать [он не реализован] (https://github.com/sympy/sympy/blob/112d6abaf2c777a844d4290db9ecd952053a4a55/sympy/physics/quantum/commutator.py#L121). Вы можете открыть для него проблему. –