Groebner[Basis] - Groebner 基底の計算
|
パラメータ
|
|
J
|
-
|
多項式のリストか集合、あるいは PolynomialIdeal
|
tord
|
-
|
単項式順序の一般的な記述か短い記述あるいは名前
|
opts
|
-
|
オプション keyword=value
|
|
|
|
|
説明
|
|
•
|
Groebner[Basis] コマンドは可換・非可換多項式環上のイデアル・加群の Groebner 基底を計算します。このヘルプページでは最も一般的な場合、つまり可換多項式環上のイデアルを定義する多項式のリスト、または集合を入力とする場合について解説しています。加群や非可換の Groebner 基底計算については Basis_details で解説しています。
|
•
|
Groebner 基底は、イデアルに入っている任意の多項式の頭単項式を、Groebner 基底のいくつかの多項式の頭単項式で割り切るという性質を持っています。Groebner 基底による割り算は、唯一に定まる剰余、あるいは正規形 (NormalForm) を与えます。
|
•
|
J は多項式のリスト、集合か、 PolynomialIdeal のデータ構造である必要があります。PolynomialIdeals による入力は、計算効率の面で、大規模な問題に有用です。Groebner 基底は多くの最適化を利用でき、型のチェックも省略できます。
|
•
|
tord は単項式順序を表します。例えば、plex(x,y,z) は変数順序を x > y > z. と置いた辞書式順序を定義します。利用可能な単項式順序の一覧は MonomialOrders をご参照ください。このパラメータには、名前を入力することもできます。このとき Groebner[Basis] は単項式順序を一つ選び、その単項式順序を tord に割り当てます。また、この場合変数はオプションのパラメータ variables={...} を用いて指定し、単項式順序の型は order=... を用いて指定する事ができます。詳しくは例をご参照ください。
|
•
|
オプションとして characteristic=p を指定すると、標数を定めることができ、有理数体上の計算の代わりに p を法とした係数での計算をおこなえます。このオプションは入力が PolynomialIdeal であった場合は無視されますが、一つ目のパラメータを J mod p とすることで同様の計算をおこなえます。Maple では整数係数の Groebner 基底の計算を行う算法がありませんので、係数は体でなくてはなりません。代数拡大には RootOfs か根号を用います。
|
•
|
オプションとして output=extended を指定すると、Groebner 基底の元が、生成元 J を用いてどのように表されているかを得られる変換行列 C を計算します。出力は (G, C) の形であり、G は Groebner 基底、C はリストのリストとなります。各 G[i] は、C[i] と J との内積と一致します。この行列は保持されませんので、もしもう一度必要になったとしても、Groebner 基底の計算をやり直さなくてはなりません。
|
•
|
オプションとして method=... を指定すると Groebner 基底計算に使う算法や戦略を指定することができます。このことに関する情報や計算効率に関連した話題は Basis_algorithms をご参照ください。
|
•
|
gbasis コマンドは同じ働きをしますが、今後リリースされる Maple ではサポートされない可能性がありますのでご注意ください。
|
|
|
例
|
|
>
|
F := [x^3 - 3*x*y, x^2*y - 2*y^2 + x];
|
| (4.1) |
>
|
Basis(F, plex(x,y)); # lexicographic order with x > y
|
| (4.2) |
>
|
Basis(F, tdeg(x,y)); # graded reverse lexicographic order
|
| (4.3) |
>
|
Basis(F, 'tord'); # choose a term order and assign it to tord
|
| (4.4) |
| (4.5) |
>
|
Basis(F, 'tord', order='grlex'); # choose a graded lex order
|
| (4.6) |
| (4.7) |
>
|
Basis(F, plex(x,y), characteristic=3); # computation over Z[3]
|
| (4.8) |
>
|
G, C := Basis(F, plex(x,y), output=extended); # compute a transformation matrix
|
| (4.9) |
>
|
[seq(expand(add(C[i][j]*F[j], j=1...nops(F))), i=1..nops(C))];
|
| (4.10) |
いま計算された Groebner 基底の情報を保持したまま、PolynomialIdeal のデータ構造を作ります。
>
|
with(PolynomialIdeals):
|
| (4.11) |
>
|
IdealInfo[KnownGroebnerBases](J);
|
| (4.12) |
以下のコマンドによる計算では、既にわかっている Groebner 基底が計算に利用できないか調べるため、Groebner 基底の計算を一切行っていません。
| (4.13) |
>
|
UnivariatePolynomial(y, J);
|
| (4.14) |
| (4.15) |
PolynomialIdeals は NormalForm コマンドの入力とすることもでき、対応した Groebner 基底を用いた計算を自動的に行います。
>
|
f := x^3*y^2 - x*y - 1;
|
| (4.16) |
>
|
NormalForm(f, J, tdeg(x,y));
|
| (4.17) |
>
|
NormalForm(f, J, plex(x,y));
|
| (4.18) |
|
|