多変数多項式の単項式順序
|
使い方
|
|
Basis(J, tord)
NormalForm(f, J, tord)
LeadingTerm(f, tord)
|
|
パラメータ
|
|
J
|
-
|
多項式のリストか集合、あるいは PolynomialIdeal
|
tord
|
-
|
以下に示す単項式順序のうちのひとつ
|
f
|
-
|
(単一の) 多項式
|
|
|
|
|
説明
|
|
•
|
単項式順序 (monomial order) は、多変数多項式の項を並べる関数です。Groebner パッケージのコマンドは多変数多項式の割り算 (簡約) を定義するのにこの単項式順序を用います。簡約とはある多項式の頭項を、多項式集合の頭項を使って繰り返し打ち消していく、という操作です。これは、多変数多項式の割り算は正規の剰余あるいは正規形 (normal form) を計算するという、Groebner basis の基本的なアイデアを自然に導きます。
|
•
|
停止性を保証するために、単項式順序 < は次の 3 つの条件を満たす必要があります。
|
–
|
well-ordering であること、つまり、全ての単項式の集合は最小元をもつ
|
–
|
U, V, W を単項式とし、U < V なら W*U < V*U 。
|
•
|
Maple に組み込まれている順序ではこれらの条件は満たされています。
|
–
|
plex(x[1],...,x[n]) は x[1] > x[2] > ... > x[n] なる純辞書式順序です。この順序は変数消去や多項式を連立方程式系としたときの解法に用いられますが、計算される Groebner 基底は非常に巨大になることがあります。単項式はまず x[1] について比較し、同じであった時は x[2] についての比較、といったように比較し、差がつくまで続けます。
|
–
|
grlex(x[1],...,x[n]) は x[1] > x[2] > ... > x[n] なる全次数辞書式順序です。単項式はまずその全次数 (degree 参照) で比較を行い、あとは差がつくまで辞書式順序で比較します。この順序は一般に "tdeg" に、速さで劣るため、あまり使用されることはありません。
|
–
|
tdeg(x[1],...,x[n]) は全次数逆辞書式順序 ("grevlex" と表記されることもあります) です。単項式はまず全次数によって比較され、差がつくまで逆辞書式、つまり x[n] の方から小さい方、同じであれば x[n-1] の小さい方と比較していきます。この順序は一般的に最も高速に Groebner 基底を計算するため、よく使われます。
|
–
|
lexdeg(L[1],...,L[k]) は消去順序です。L[i] は互いに同じものを含まない変数のリストでなくてはなりません: i=1..k-1 について、L[i] に含まれる変数は後続の変数によって消去されます。この順序は "plex" による計算を避けて変数消去する際に用いられます。この順序は各 L[i] について "tdeg" を取った積順序と等しくなります。
|
–
|
wdeg(W,V) は重みつき全次数順序です。V は変数のリストで、W は重みを表す正の有理数です。単項式はその 重みつき全次数 、つまり各 V[i] のべきは W[i] 倍されて計算された全次数で比較されます。同じであったときは差がつくまで逆辞書式による比較を続けます。
|
–
|
'matrix'(M,V) は行列順序です。V は変数のリスト、M は重みを表す有理数のリストのリストです。上述の 3 つの条件を満たすためには、M の各列の最初に出てくる 0 でない要素は正である必要があります。単項式は、まず M の最初の行による重みつき全次数による比較をし、同じであれば第 2 行目について、以下同様に差がつくまで比較をしていきます。M のランクが変数の個数より少なかった場合、続けて逆辞書式による比較を行います。行列順序を使うときは Maple の matrix 型と区別するため matrix をシングルクォート ' で囲ってください。
|
–
|
prod(t1,t2,...,tk) は単項式順序 ti たちの積順序を定義します。単項式はまず t1 による比較を行い、差がつくまで t2 以降の順序で比較していきます。
|
•
|
以上ご紹介した項順序の他に、Maple は "逆" の順序、つまり u が v より大きいとする必要十分条件が元の順序で v > u となるような順序、をサポートしています。これらの順序は通常、単項式順序の 3 つの条件を満たしません。よってこれらの順序を用いた計算の停止性は保証されません (多項式が斉次の場合は除きます) 。これらの順序は上述の順序 (prod は除きます) の名前に "_min" を追加することで指定できます。例えば plex(x,y,z) の逆順であれば plex_min(x,y,z) とすることになります。
|
•
|
Groebner パッケージは関数を用いて定義する、ユーザ定義の単項式順序もサポートしています。これを用いるためには MonomialOrder コマンドを用いて単項式順序オブジェクトを構成します。詳しい使い方はコマンドのヘルプページをご参照ください。ユーザ定義の単項式順序はいくつかのアルゴリズム (例えば Groebner walk のような) ではサポートされていませんのでご注意ください。可能ならば組み込みの順序を用いて表現しなおすことをお勧めします。
|
|
|
例
|
|
>
|
f := 5*x^3*y + x^2*w^2*t + 5*x^3*y*z*t - 2*x*z*w^3*t + 3*y^2*w^3*t;
|
| (4.1) |
まずは x > y > z > w > t なる辞書式順序を考えます。f の項は Maple の sort コマンドで並べ替えることができます。
>
|
sort(f, [x,y,z,w,t], plex);
|
| (4.2) |
LeadingTerm コマンドは (leading monomial, leading coefficient) を出力します。実際に項を作るには `*` を用いて出力を掛け合わせます。
>
|
`*`(LeadingTerm(f, plex(x,y,z,w,t)));
|
| (4.3) |
単項式順序に関して最小の項を計算するためには 2 つの方法があります。一つは "逆" 順序の頭項として計算する方法です。もう一つは TrailingTerm コマンドを用いる方法です。
>
|
`*`(TrailingTerm(f, plex(x,y,z,w,t)));
|
| (4.4) |
>
|
`*`(LeadingTerm(f, plex_min(x,y,z,w,t)));
|
| (4.5) |
続いて x > y > z > w > t なる全次数辞書式順序の例です。項はまず全次数で比較され、同じであれば差がつくまで辞書式順序による比較を行います。この順序は Maple の sort コマンドの標準の順序です。
| (4.6) |
>
|
`*`(LeadingTerm(f, grlex(x,y,z,w,t)));
|
| (4.7) |
>
|
`*`(TrailingTerm(f, grlex(x,y,z,w,t)));
|
| (4.8) |
最大次数をもつ項は InitialForm コマンドを用いて取り出すことができます。この例では 2 つ以外の項は次数 6 を持っている事がわかります。
>
|
initf := InitialForm(f, grlex(x,y,z,w,t));
|
| (4.9) |
| (4.10) |
次の例は f の項を (昇) 全次数逆辞書式順序に並べたものです。最後の 3 つの項は順番を定めるために t の次数、w の次数を比べ、最終的に z の次数を比較に使っています。
>
|
sort([op(f)], (a,b)->TestOrder(a,b,tdeg(x,y,z,w,t)));
|
| (4.11) |
消去順序として、まず tdeg(x,y) を用い、続いて tdeg(z,w,t) を使って比較するような順序を考えます。この順序を用いた Groebner 基底計算では、可能ならば変数 {x,y} を消去します。
>
|
sort([op(f)], (a,b)->TestOrder(a,b,lexdeg([x,y],[z,w,t])));
|
| (4.12) |
続いて重みつき全次数順序を考えます。x のべきは 2 倍で計算され、y のべきは 1/2 倍で計算されます。残りの変数については 1 で計算します。
>
|
`*`(LeadingTerm(f, wdeg([2,1/2,1,1,1], [x,y,z,w,t])));
|
| (4.13) |
>
|
WeightedDegree(f, [2,1/2,1,1,1], [x,y,z,w,t]);
|
| (4.14) |
組み込みの順序は行列順序として表現できます。以下では全次数逆辞書式順序を行列表現し、f の頭項を計算します。
>
|
M := MatrixOrder(tdeg(x,y,z,w,t), [x,y,z,w,t]);
|
| (4.15) |
>
|
Matrix(M); # nice display
|
| (4.16) |
>
|
`*`(LeadingTerm(f, 'matrix'(M, [x,y,z,w,t])));
|
| (4.17) |
多変数多項式の割り算の例については Groebner[NormalForm] をご参照ください。Groebner 基底を計算するためには Groebner[Basis] コマンドを使用します。このページにある単項式順序以外のものを定義する手順については、Groebner[MonomialOrder] をご参照ください。
|
|