4

要するに、p1p2q1およびの間の乗算を含む式があり、式を対称形式にするためにをq2使用したいと思います。[qi,pi]=ii*hbi={1,2}(pi^a*qi^b+qi^b*pi^a)/2

たとえば、単純化といくつかの置換を使用しますp2*q2*p2^2。しかし、ルールを指定し、1 と 2 の変数が通勤することを指定しましたが、(p2*q2^3+q2^3*p2)/2 + 1/2*ii*p2^2*hb単純化することはできません。q2*q1^2*p2q2*p2-> (p2*q2+q2*p2)/2 +ii/2*hb

詳細については、Mathematica のコードを次に示します ( quantum パッケージを使用しています)。

このコードは、インデックスが 1 または 2 の場合は機能しますが、両方のインデックスが使用されている場合は機能しません。

p2*q2*q1*q2はさらに単純化できますが、 があるp2*q1*q2^2のでMathematica はそれをしません。p2*q2*q2q1

さらに詳しく:この論文の付録 (式 A2) の方程式を取得できる Mathematica コードを作成しようとしていますが 、これは私が使用しているコードです。後者のファイルのコードは、上記のコードも実行できなかったため、上記のコードとは少し異なりますが、理想的です。

最後に、4 乗またはそれ以上の他の種類のハミルトニアンの最終的なコードを使用したいと思います。

的を絞った単純化を行うことができるパッケージの書き方を学ぶ方法についてアドバイスをいただければ幸いです。

4

1 に答える 1

5

単純化するためにルールを使用しているだけの場合 (そして、 を使用することを意味していると仮定していますReplace[])、置換したいパターンが存在するが正確な形式ではない場合、問題が発生する可能性があります。たとえば、Replace[q2*q1^2*p2,q2*p2->(p2*q2+q2*p2)/2]この場合、あなたの例は何もしません( q2*p2*q1^2Mathematica は評価を開始する前にすべての入力をソートするため、書いても役に立たないことに注意してください.

私は過去に Mathematica で同様の単純化の問題に遭遇したことがありますが、妥当な成功を収めた 2 つの方法があります。具体的な解決策をお伝えできず申し訳ありませんが、ご参考になれば幸いです。

解決策 1: の適用可能なReplaceUnordered[form,rule]すべての異なる順序を解析する独自の関数を作成する必要があります。これは とを使用して行うことができます。formrulePermutations[]HoldForm[]

解決策 2: を使用しSimplify[]ます。具体的には、オプションComplexityFunctionを使用して非対称式をより「高価」にし、オプションTransformationFunctionsを使用して独自の単純化規則を指定します。

ここ (pdf)は Mathematica の短い (っぽい) 紹介であり、その構造と評価プロセスです。

おまけの解決策:抱えている問題を解決するために特別に書かれた言語であるFORMを使用してください。

編集:エクストラエクストラボーナス(おそらく非常に簡単)解決策:rcollierが指摘したSymmetricReduction[]ように、あなたが望むことを非常に簡単に行うことができます。

そして、道路のためにもう1つ: 非可換変数で計算をしなければならなかったとき、グラスマン変数の代数と微積分を含むこのパッケージを使用しました。



于 2010-10-18T12:13:34.623 に答える