Groebner[MonomialOrder] - 単項式順序の構成
|
使い方
|
|
MonomialOrder(A, tord, M)
|
|
パラメータ
|
|
A
|
-
|
Ore_algebra パッケージによって生成された多項式代数
|
tord
|
-
|
単項式順序の短い記述かユーザ定義の単項式順序
|
M
|
-
|
(オプション) 加群の要素の位置を定める変数
|
|
|
|
|
説明
|
|
•
|
MonomialOrder コマンドは多項式代数 A 上の単項式順序を構成します。このオブジェクト (MonomialOrder と呼ばれます) は Groebner パッケージの、加群や非可換多項式環の (左) イデアルに関する計算を行うコマンドと共に用いられます。
|
•
|
可換な問題を扱う場合は単項式順序の短い記述 (例えば plex(x,y,z) といったような) を用いることができるので、ほとんどの場合 MonomialOrder オブジェクトを構成する必要はありません。単項式順序の短い記述のリストは MonomialOrders をご参照ください。
|
•
|
第 1 引数は Ore_algebra パッケージを用いた代数 A です。それは次のうちのいづれかとなることができます:
|
•
|
第 2 引数はその代数構造の変数の順序を定める 単項式順序の短い記述 です。例えば plex(x,y,z) は x > y > z なる辞書式順序を定義します。代数 A 上の全ての変数が順序づけられていなくてはなりません。単項式順序の短い記述のリストは MonomialOrders をご参照ください。
|
•
|
第 2 引数は user(P, L) か user(P, Q, L) の形のユーザ定義の単項式順序とすることもできます。どちらの形式でも、P は二つの単項式を引数に取り昇順に並んでいた時のみ true を返すような関数、L は単項式順序を定義する変数のリスト、そして (オプションの) Q は多項式の頭項を計算する関数 (LeadingTerm 参照) です。Q は多項式を入力とし、(leading coefficient, leading monomial) を返す関数ある必要があります。
|
•
|
オプションの第 3 引数 M は加群の要素の位置を定める変数のリストか集合です。これらの変数は代数 A に入っていなくてはならず、tord によって順序づけられていなくてはなりません。M の要素による積は許されておらず、異なる M の要素を持つ単項式は、加群の異なる位置にある要素ということになります。詳しい情報は Groebner[Basis_details] をご参照ください。
|
•
|
Ore_algebra パッケージの技術的な制限によって、例えば d[x] と x のように、互いに影響するような変数の組みをもつ代数構造に対して MonomialOrder オブジェクトを構成することはできません。一般に、 なる任意の変数の組みに対して depends(u,v) は false とならなければ MonomialOrder コマンドはエラーを返します。dx と x や、d[1] と x[1] いったような表記をお使いください。この制限は単項式順序の短い記述を用いた可換な場合の計算にはありません。
|
•
|
注意: termorder コマンドは同様の働きをしますが、今後リリースされる Maple ではサポートされない可能性がありますのでご注意ください。
|
|
|
例
|
|
まずはじめに多項式環 Q[x,y,z] 上の単項式順序の構成の例を示します。単項式は x > y > z なる辞書式順序で並びます。
>
|
A := poly_algebra(x,y,z); # make the algebra
|
| (4.1) |
>
|
T := MonomialOrder(A, plex(x,y,z));
|
| (4.2) |
このようにすると、Groebner 基底を計算するのに T を用いることができます。しかしこの場合は短い構文を用いても同様の結果を得ることができます。
>
|
f := -4*y*x-3*z^2+y*z^2-5*x^4+x^3*z^2;
|
| (4.3) |
| (4.4) |
>
|
LeadingTerm(f, plex(x,y,z));
|
| (4.5) |
加群や非可換多項式環といったもっと複雑なドメインには、単項式順序の定義は MonomialOrder オブジェクトを構成する必要があります。以下では i=1..2 に対して D[i]*x[i] = x[i]*D[i] + 1 となる Weyl 代数を定義します。D[i] が変数で、x[i] をパラメータとします。この環は D[1] > D[2] なる全次数逆辞書式順序に順序づけられます。
>
|
A := diff_algebra([D[1], x[1]], [D[2], x[2]]);
|
| (4.6) |
>
|
A["polynomial_indets"];
|
| (4.7) |
| (4.8) |
>
|
T := MonomialOrder(A, tdeg(D[1], D[2]));
|
| (4.9) |
>
|
SPolynomial(D[1]*x[2]-x[2], D[2]*x[1]-x[1], T);
|
| (4.10) |
ユーザ定義の (辞書式) 順序
>
|
A := poly_algebra(x,y,z):
|
>
|
P := proc(t1, t2) global x,y,z; (degree(t1,x) < degree(t2,x)) or (degree(t1,x) = degree(t2,x) and degree(t1,y) < degree(t2,y)) or (degree(t1,x) = degree(t2,x) and degree(t1,y) = degree(t2,y) and degree(t1,z) <= degree(t2,z)) end proc:
|
>
|
T := MonomialOrder(A, 'user'(P, [x,y,z]));
|
| (4.11) |
| (4.12) |
|
|