4

简而言之,我有一个表达式,其中包含 , 和 , 之间的乘法p1,我p2想使用, where将表达式变为对称形式。q1q2[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并且带有 1s 和 2s 的变量可以通勤。

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

该代码在索引为 1 或 2 时有效,但在同时使用两个索引时无效:

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

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

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

我想要一个建议,我可以学习如何编写一个可以为我进行有针对性的简化的包。

4

1 回答 1

5

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

我过去在 Mathematica 中遇到过类似的简化问题,有两种策略取得了相当大的成功。很抱歉我不能给你一个具体的解决方案,我希望这些能帮助你解决这个问题。

解决方案 1:您必须编写自己的函数来ReplaceUnordered[form,rule]解析. 这可以通过和使用来完成。formrulePermutations[]HoldForm[]

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

这里 (pdf)是对 Mathematica 及其结构和评估过程的简短介绍。

额外奖励解决方案:使用FORM,这是一种专门为解决您遇到的问题而编写的语言。

编辑:额外的额外奖金(可能很容易) 解决方案:正如rcollier指出的那样,SymmetricReduction[]可能很容易做你想做的事。

还有一个用于道路:当我不得不使用非交换变量进行计算时,我使用了这个包,其中包含 Grassmann 变量的代数和微积分。



于 2010-10-18T12:13:34.623 回答