5次方程式をこのアルゴリズムで解く試みを始めています。例題としては
\(x^5-5\,x+12\)
を取り上げます。この方程式は文献4:
文献 4 大迎「可解な5次方程式について」学位論文、兵庫教育大学大学院
のp74, 4.3 可解な5次方程式の解法例1の例2として取り上げられている方程式です。
以前のブログ記事のコメント欄でehitoさんに教えて頂いた、「原始元の最小多項式を高精度数値演算で求める方法」をGal.macのgal_minimal_polynomial_V()という関数にインテグレーションしました。このため、120次の多項式を求める計算は高速に実行できます。
一方、既約な5次方程式の5つの解を原始元で表す計算は依然としてメモリと時間が非常にかかります*1。24次の多項式なのですが、解を表す変数が5つあることがその理由のようです。この方程式でその部分の計算(Gal.macの中のgal_sol_V()という関数)を実行すると、iMac corei5 2.7GHz (2013年のマシン)に8GBメモリ搭載のマシンを使い、SBCLという64bit版のLispでコンパイルしたMaxima 5.42.1に32GBのメモリを割り当てて計算したところ、時間は2時間、メモリ消費は最大17GB使いました。
上のウィンドウの画像を見ると、物理メモリ8GBのマシンでスワップ領域が9GBまで広がり、sbclが17GB使っていることがわかります。この時プログラムとしては係数の対称式を基本対称式で表す計算を実行していました。
この計算が終了したのち、一旦計算結果を、
save("quinticPS.lisp", PS);
として保存しました。2時間分の計算結果がPSという構造体にまとまっているので途中結果保存が簡単にできます。
以下にはその続きの計算を示します。
(%i10) load("quinticPS.lisp");
$$ \tag{%o10} \verb|quinticPS.lisp| $$
元の多項式と、原始元の最小多項式を示します。
(%i11) [PS@polynomial, PS@gal_minpoly];
$$ \tag{%o11} \left[ x^5-5\,x+12 , V^{10}-110\,V^8+3325\,V^6-12500\,V^4-1521500\,V^2+148996000 \right] $$
ガロア群を見ていきます。
(%i16) FG:new(FiniteGroup);
$$ \tag{%o16} Group\mathbf{false} $$
(%i17) gr_gen_tables(FG,PS@solperm,PS@galois_group_index)$
この方程式のガロア群とその組成列を計算します。
(%i18) NSGS:gr_subnormal_series(FG);
$$ \tag{%o18} \left[ Group\left[ 1 , 17 , 26 , 47 , 64 , 68 , 78 , 87 , 108 , 109 \right] , Group\left[ 1 , 47 , 64 , 78 , 109 \right] , Group\left[ 1 \right] \right] $$
ガロア群は位数10の群であること、位数5の正規部分群があり、単位群につながることがわかりました。
組成列の中の隣の群との位数の商を見てみます。
(%i19) for i:1 thru length(NSGS)-1 do print(NSGS[i]@degree/NSGS[i+1]@degree);
$$ \tag{*} 2\verb| | $$ $$ \tag{*} 5\verb| | $$
$$ \tag{%o19} \mathbf{done} $$
2も5も素数ですから多項式\(x^5-5\,x+12\)のガロア群は可解群であること、従ってこの多項式の根は冪根で計算できることがわかります。また5つの根を原始元Vで表す方法もわかりました。
*1:原始元の最小多項式を求める計算とよく似た計算なので、ehitoさんの高精度数値演算の方法が使えるか検討したのですが、、、まだ成功していません。単純に残したいもの以外の解を表す変数に解の数値を代入するのでは上手くいきません。