『多項式に対する剰余の計算方法』

与えられた多項式 p およびイデアル I に対して、その剰余類を計算する方法を紹介します。
(Mathematica の PolynomialMod 関数と同等の計算)

剰余(Polynomial Modulo)は、イデアルの元を用いて与えられた多項式を簡約することで計算することができます。Maple では、多項式簡約を行うには Groebner パッケージに収められている reduce 関数で行うことができます。

まず、以下の2変数多項式を考えます;

>    p := x^5 - (y - 1)*x^4 + 2*(y^2 + y)*x^3 - (y - 2)*x^2 + 5*x - 1;

p := x^5-(y-1)*x^4+2*(y^2+y)*x^3-(y-2)*x^2+5*x-1

この多項式に対して、イデアル(x^3, y^3)のもとで簡約を行ってみます。簡約するときには項順序を指定する必要があります。

>    Groebner[reduce](p, [x^3, y^3], tdeg(x,y));

-x^2*y+2*x^2+5*x-1

全次数(todal degree)に関して3次以上の項を切り捨てる(剰余を取る)場合は、以下のように全次数を表す補助変数を用いて多項式を一度変換し、簡約化を行います。

>    trans_p := subs({x=t*x, y=t*x}, p);

trans_p := t^5*x^5-(t*x-1)*t^4*x^4+2*(t^2*x^2+t*x)*t^3*x^3-(t*x-2)*t^2*x^2+5*t*x-1

>    reduced_tp :=Groebner[reduce](tp, [t^3], tdeg(t));

reduced_tp := 2*t^2*x^2+5*t*x-1

簡約を行った後、補助変数に1を代入することで最終的な結果を得ることができます。

>    subs({t=1}, reduced_tp);

2*x^2+5*x-1

これで、全次数に関して3次以上の項を捨てた剰余を得ることができました。

なお、項順序の指定については、Groebner パッケージの termorder  のページが参考になります。

閉じる