在mathematica中简化和重新排列非交换变量

kir*_*gum 4 wolfram-mathematica symbolic-math

简而言之,我有一个表达式,包含,和之间的乘法p1,我想使用,在哪里将表达式转换为对称形式.p2q1q2[qi,pi]=ii*hbi={1,2}(pi^a*qi^b+qi^b*pi^a)/2

例如,因为p2*q2*p2^2(p2*q2^3+q2^3*p2)/2 + 1/2*ii*p2^2*hb使用简化和一些替换.但我无法简化,q2*q1^2*p2虽然我已经指定了规则q2*p2-> (p2*q2+q2*p2)/2 +ii/2*hb,并且1和2的变量通勤.

更详细地说,这是Mathematica代码(我使用量子包).

当索引为1或2时,代码有效,但在使用两个索引时不起作用:

p2*q2*q1*q2给出p2*q1*q2^2,p2*q2*q2可以进一步简化,但既然有q1,Mathematica不会这样做.

更详细的说明:我正在尝试编写一个Mathematica代码,可以在本文的附录(方程A2)中得到方程式 ,这就是我正在使用的代码.后一个文件中的代码与上面的代码略有不同,因为我无法让上面的代码运行,但它是理想的.

最后,我想将最终代码用于其他类型的哈密顿量,最高可达4次幂甚至更高.

我喜欢建议如何编写一个可以为我做有针对性的简化的软件包.

Tim*_*imo 5

如果您只是使用规则来简化(我假设您的意思是您使用Replace[]),那么如果您要替换的模式存在但不是以完全正确的形式存在,则可能会出现问题.例如,你的例子Replace[q2*q1^2*p2,q2*p2->(p2*q2+q2*p2)/2]在这种情况下什么都不做(注意写作q2*p2*q1^2也没有用,因为Mathematica在开始评估之前对所有输入进行排序.

我过去遇到过与Mathematica类似的简化问题,并且有两种策略取得了合理的成功.对不起,我不能给你一个具体的解决方案,我希望这些可以帮助你搞清楚.

解决方案1:您必须编写自己的ReplaceUnordered[form,rule]函数来解析form可能的应用程序的所有不同顺序rule.这可以通过Permutations[]和使用来完成HoldForm[].

解决方案2:使用Simplify[].具体使用选项ComplexityFunction使非对称表达式更"昂贵",并使用选项TransformationFunctions来指定自己的简化规则.

这里(pdf)是对Mathematica及其构造和评估过程的简短(ish)简介.

额外奖金解决方案:使用FORM,这是一种专门用于解决您遇到的问题的语言.

编辑:额外额外奖金(可能非常简单)解决方案:正如rcollier所指出的那样SymmetricReduction[]可能很容易做到你想要的.

另外还有一条道路:当我不得不用非交换变量进行计算时,我使用了这个包含代数和格拉夫曼变量的微积分的包.