■ポンスレーの定理におけるオイラー・フース型定理(その3)

[1] まず、座標の数が少ない場合、

  GroebnerBasis[{exp1,...,expn},{},{消去したい変数}]

で、簡単に座標変数、三角関数を一気の消去することができた。

[2]座標関数、三角関数が多いとき、三角関数をまず、消去する。

これは、この種の問題共通のやり方でできる。

[3] 座標変数については、いくつかの多項式から適当な組み合わせを選び、一つずつ消していく。

[4] この際、変数の次数が高いと、GroebnerBasis[{expr1,expr2},{},{x1}]

の実行速度が遅くなる。よって、因数分解を行い、すべての組み合わせについて、(あるいは適当な組み合わせについて)、

  GroebnerBasis[{expr1,expr2},{},{x1}]

を実行する。

 ここで、たとえばn=8の場合をみると、exprは消去対象の変数について四次式以下である。だから、毎回GroenberBasisを毎回呼び出して実行するのは不効率。

[5]そこで、以下のようなパッケージを作成した。(myGroeb.m)

(a) 四次式以下の多項式の組み合わせについて、あらかじめ

  GroebnerBasis[{n次式、m次式},{},{変数}]

を実行しておいて、公式集を作っておく.たとえば,el55は五次式の多項式同士の消去の公式(この計算に一晩かかったが,パッケージに一旦組み込んでしまえば、一瞬のうちに変数の消去をしてくれる。

(b)myGroeb[e1_, e2_, val_]は、すでにe1,e2がこれ以上因数分解できないと仮定して、el12などの公式を援用して変数を消去する。

(c)myFactor[g_]は、多項式の因数分解 

ただし、g = A^2 B^3 Cと因数分解されるとき、{A,B,C}というように冪をのぞいて答えを返す。

(c)myGroebAll[e1_, e2_, val_]は、e1,e2をmyFactorで分解した後、すべての組み合わせについて、myGroebを用いて、変数の消去を行い、これらの積を返す。

たとえば、e1 = a1 a2 a3 .. , e2 = b1 b2 b3 ...だったらmyGroeb[ai,bj,変数]を実行して、この積をもとめていく。

 これを用いることにより、これまで一晩かかってもできないような計算が数時間(運が良ければ30分)で結果を得ることができた。

===================================