Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-数学- 可解な方程式を冪根で解く(2) ガロア群の計算

British Airways lounge at BRU

 

まずはガロア群の計算です。

ここからGG6.macをダウンロードすることが出来ます。

GG6.mac - Google ドライブ

(%i1) load("GG6.mac");
$$ \tag{%o0} \verb|GG6.mac| $$

例題の多項式を変数p1に代入します。
(%i1) p1:x^4+2*x^3+3*x^2+4*x+5;
$$ \tag{%o1} x^4+2\,x^3+3\,x^2+4\,x+5 $$

 

文献3の例題4に合わせて、原始元を作るための根の一次結合の係数を設定します。
(%i2) gal_phi(xlist):=ev(sum(xlist[i]*cl[i],i,1,length(xlist)),cl:[1,-1,2,0,3,2]);
$$ \tag{%o2} \mathrm{gal\underline{\quad}phi}\left(\mathrm{xlist}\right):=\mathrm{ev}\left(\mathrm{sum}\left(\mathrm{xlist}_{i}\,\mathrm{cl}_{i} , i , 1 , \mathrm{length}\left(\mathrm{xlist}\right)\right) , \mathrm{cl}:\left[ 1 , -1 , 2 , 0 , 3 , 2 \right] \right) $$

ファイルGG6.macでは最初にGalPolynomialInfoという構造体を定義しています。gal_init_polynomial_info()関数ではこの構造体を一つ生成し、引数の多項式から直ぐに計算できる項目を計算し、それらの値で構造体を初期化して戻り値とします。
(%i3) PS:gal_init_polynomial_info(p1);
$$ \tag{%o3} \mathrm{GalPolynomialInfo}\left(x^4+2\,x^3+3\,x^2+4\,x+5 , 4 , \left[ \mathrm{e1}=-2 , \mathrm{e2}=3 , \mathrm{e3}=-4 , \mathrm{e4}=5 \right] , \left[ a , b , c , d \right] , \left[ \left[ a , b , c , d \right] , \left[ a , b , d , c \right] , \left[ a , c , b , d \right] , \left[ a , c , d , b \right] , \left[ a , d , b , c \right] , \left[ a , d , c , b \right] , \left[ b , a , c , d \right] , \left[ b , a , d , c \right] , \left[ b , c , a , d \right] , \left[ b , c , d , a \right] , \left[ b , d , a , c \right] , \left[ b , d , c , a \right] , \left[ c , a , b , d \right] , \left[ c , a , d , b \right] , \left[ c , b , a , d \right] , \left[ c , b , d , a \right] , \left[ c , d , a , b \right] , \left[ c , d , b , a \right] , \left[ d , a , b , c \right] , \left[ d , a , c , b \right] , \left[ d , b , a , c \right] , \left[ d , b , c , a \right] , \left[ d , c , a , b \right] , \left[ d , c , b , a \right] \right] , \left[ V_{1}=2\,c-b+a , V_{2}=2\,d-b+a , V_{3}=-c+2\,b+a , V_{4}=2\,d-c+a , V_{5}=-d+2\,b+a , V_{6}=-d+2\,c+a , V_{7}=2\,c+b-a , V_{8}=2\,d+b-a , V_{9}=-c+b+2\,a , V_{10}=2\,d-c+b , V_{11}=-d+b+2\,a , V_{12}=-d+2\,c+b , V_{13}=c+2\,b-a , V_{14}=2\,d+c-a , V_{15}=c-b+2\,a , V_{16}=2\,d+c-b , V_{17}=-d+c+2\,a , V_{18}=-d+c+2\,b , V_{19}=d+2\,b-a , V_{20}=d+2\,c-a , V_{21}=d-b+2\,a , V_{22}=d+2\,c-b , V_{23}=d-c+2\,a , V_{24}=d-c+2\,b \right] , \left[ \right] , \left[ \right] , 0 , \mathbf{false}\right) $$

ここまでで、解の対象式の値、解の名前、解の全ての順列、原始元VとVに解の置換を適用して得られる\(V_1=V \sim V_{24}\)が計算できました。

 

原始元Vの最小多項式を求めます。
(%i4) gal_minimal_polynomial_V(PS);
$$ \tag{%o4} V^{24}+24\,V^{23}+336\,V^{22}+3344\,V^{21}+25740\,V^{20}+159984\,V^{19}+820856\,V^{18}+3519504\,V^{17}+12721926\,V^{16}+39075680\,V^{15}+104485896\,V^{14}+257189424\,V^{13}+603068156\,V^{12}+1264487184\,V^{11}+1484791560\,V^{10}-3707413456\,V^9-23515353279\,V^8-53513746296\,V^7-7075256024\,V^6+299352120960\,V^5+770653544880\,V^4+869309952000\,V^3+1145273500800\,V^2+1451723788800\,V+1818528595200 $$

最小多項式の全ての解\(V_1 \sim V_{24}\)をVで表します。またその結果を使って元の多項式p1の全ての解をVで表し、GalPolynomialInfo構造体に格納します。
(%i5) gal_sol_V(PS)$

ではガロア群を根の置換群として求めます。
(%i6) gal_galois_group(PS);

$$ \tag{%o6} \begin{pmatrix}a&b&c&d\\ a&b&d&c\\ a&c&b&d\\ a&c&d&b\\ a&d&b&c\\ a&d&c&b\\ b&a&c&d\\ b&a&d&c\\ b&c&a&d\\ b&c&d&a\\ b&d&a&c\\ b&d&c&a\\ c&a&b&d\\ c&a&d&b\\ c&b&a&d\\ c&b&d&a\\ c&d&a&b\\ c&d&b&a\\ d&a&b&c\\ d&a&c&b\\ d&b&a&c\\ d&b&c&a\\ d&c&a&b\\ d&c&b&a \end{pmatrix} $$

 

一番上の行がはみ出していますが、MathJaxのバグのような気がしますので、気にしないでください。この方程式のガロア群の位数は24、従って対称群\(S_4\)であることが分かりました。

 

この記事で使った関数:

gal_init_polynomial_info(), gal_minimal_polynomial_V(), gal_sol_V(), gal_galois_group()は

 

と引き続く記事で示したプログラムと全く同じ処理で、それを大域変数を中心に整理しただけのもです。

 

今後、これらの関数の高速化のためにehitoさんに教えてもらったbfloat版に書き換える予定です。