我想找出一些换向器操作,并发现这个工具的渐近性。它看起来像预期的那样工作(但是文档实际上是不存在的,或者至少我没有发现什么,但是请看下面Dalton的评论),但是我遇到了下面的问题。
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 (因为[[A,B,A],B] = [[A,B,B],A])。那么,在不计算换向器(即w/o调用doit()函数)的情况下,如何强制得到更简单的结果呢?请注意,
simplify(E.doit())
>>> 0给出所需的结果。
发布于 2016-03-23 14:09:35
目前,在SymPy中,换向器不知道这个标识,因此它必须展开换向器(在您已经识别的.doit方法中),以便能够简化表达式。
要做到这一点,需要的是向Commutator._eval_expand_commutator方法中添加特例,以便当换向器的参数包含换向器时,然后检查已知的标识。
我在这里打开了一个问题:https://github.com/sympy/sympy/issues/10892
https://stackoverflow.com/questions/36095622
复制相似问题