前回の記事で、「代数的数の和は代数的数」の計算例を示しました。全く同じ方法で「代数的数の積は代数的数」も実際に計算することができます。
(%i1) f(x):=x^2+1;
$$ \tag{%o1} f\left(x\right):=x^2+1 $$
(%i2) g(x):=x^3-1;
$$ \tag{%o2} g\left(x\right):=x^3-1 $$
(%i3) P1:f(a);
$$ \tag{%o3} a^2+1 $$
(%i4) P2:g(b);
$$ \tag{%o4} b^3-1 $$
(%i5) wlist:flatten(makelist(makelist(a^i,i,0,hipow(P1,a)-1)*b^j,j,0,hipow(P2,b)-1));
$$ \tag{%o5} \left[ 1 , a , b , a\,b , b^2 , a\,b^2 \right] $$
次の行はa+bではなく、a*bに変更されています。
(%i6) wlist*(a*b),expand;
$$ \tag{%o6} \left[ a\,b , a^2\,b , a\,b^2 , a^2\,b^2 , a\,b^3 , a^2\,b^3 \right] $$
(%i7) map(lambda([p],remainder(p,P1,a)),%);
$$ \tag{%o7} \left[ a\,b , -b , a\,b^2 , -b^2 , a\,b^3 , -b^3 \right] $$
(%i8) cwlist:map(lambda([p],remainder(p,P2,b)),%);
$$ \tag{%o8} \left[ a\,b , -b , a\,b^2 , -b^2 , a , -1 \right] $$
(%i9) mcoeff(poly,term):=block([dega,degb],
[dega,degb]:[hipow(term,'a),hipow(term,'b)],
coeff(coeff(expand(poly),'a,dega),'b,degb));
$$ \tag{%o9} \mathrm{mcoeff}\left(\mathrm{poly} , \mathrm{term}\right):=\mathbf{block}\;\left(\left[ \mathrm{dega} , \mathrm{degb} \right] , \left[ \mathrm{dega} , \mathrm{degb} \right] :\left[ \mathrm{hipow}\left(\mathrm{term} , \mbox{'}a\right) , \mathrm{hipow}\left(\mathrm{term} , \mbox{'}b\right) \right] , \mathrm{coeff}\left(\mathrm{coeff}\left(\mathrm{expand}\left(\mathrm{poly}\right) , \mbox{'}a , \mathrm{dega}\right) , \mbox{'}b , \mathrm{degb}\right)\right) $$
(%i10) mcoefflist(poly):=block([p],p:expand(poly),map(lambda([term],mcoeff(p,term)),wlist));
$$ \tag{%o10} \mathrm{mcoefflist}\left(\mathrm{poly}\right):=\mathbf{block}\;\left(\left[ p \right] , p:\mathrm{expand}\left(\mathrm{poly}\right) , \mathrm{map}\left(\lambda\left(\left[ \mathrm{term} \right] , \mathrm{mcoeff}\left(p , \mathrm{term}\right)\right) , \mathrm{wlist}\right)\right) $$
(%i11) matrix(mcoefflist(cwlist[1]),
mcoefflist(cwlist[2]),
mcoefflist(cwlist[3]),
mcoefflist(cwlist[4]),
mcoefflist(cwlist[5]),
mcoefflist(cwlist[6]));
$$ \tag{%o11} \begin{pmatrix}0&0&0&1&0&0\\ 0&0&-1&0&0&0\\ 0&0&0&0&0&1\\ 0&0&0&0&-1&0\\ 0&1&0&0&0&0\\ -1&0&0&0&0&0 \end{pmatrix} $$
(%i12) charpoly(%,x),ratsimp;
$$ \tag{%o12} x^6+1 $$
(%i13) solve(%,x);
$$ \tag{%o13} \left[ x=\frac{\left(-1\right)^{\frac{1}{6}}\,\sqrt{3}\,i+\left(-1\right)^{\frac{1}{6}}}{2} , x=\frac{\left(-1\right)^{\frac{1}{6}}\,\sqrt{3}\,i-\left(-1\right)^{\frac{1}{6}}}{2} , x=-\left(-1\right)^{\frac{1}{6}} , x=-\frac{\left(-1\right)^{\frac{1}{6}}\,\sqrt{3}\,i+\left(-1\right)^{\frac{1}{6}}}{2} , x=-\frac{\left(-1\right)^{\frac{1}{6}}\,\sqrt{3}\,i-\left(-1\right)^{\frac{1}{6}}}{2} , x=\left(-1\right)^{\frac{1}{6}} \right] $$
(%i14) rectform(%);
$$ \tag{%o14} \left[ x=i , x=\frac{i}{2}-\frac{\sqrt{3}}{2} , x=-\frac{i}{2}-\frac{\sqrt{3}}{2} , x=-i , x=\frac{\sqrt{3}}{2}-\frac{i}{2} , x=\frac{i}{2}+\frac{\sqrt{3}}{2} \right] $$
これで見易くなりました。f(x), g(x)の解を再度計算して、見比べてみましょう。全ての解の組み合わせの積が現れているのが分かります。
(%i15) solve(f(x),x);
$$ \tag{%o15} \left[ x=-i , x=i \right] $$
(%i16) solve(g(x),x);
$$ \tag{%o16} \left[ x=\frac{\sqrt{3}\,i-1}{2} , x=-\frac{\sqrt{3}\,i+1}{2} , x=1 \right] $$