grobner
は
MaximaでGroebner基底を使うためのパッケージです。
Groebner基底に関するチュートリアルは以下で見つかります。
http://www.geocities.com/CapeCanaveral/Hall/3131/
以下の関数を使うには、grobner.lispパッケージをロードしなければいけません。
load("grobner");
demo("grobner.demo");
もしくは
batch("grobner.demo")
でデモを開始することができます。
デモの中の計算のいくつかは長い時間かかります。 だから、デモの出力 grobner-demo.outputが デモファイルと同じディレクトリに見つかります。
パッケージは
Marek Rychlik
http://alamos.math.arizona.edu
によって書かれ、 General Public License(GPL)の条件の下、2002-05-24にリリースされました。 (ファイル grobner.lispを参照してください。) このドキュメントは、 ファイル
README, grobner.lisp, grobner.demo, grobner-demo.output
から
Günter Nowakによって抽出されました。
ドキュメントの改善に関する提案は maximaメーリングリスト maxima@math.utexas.eduで議論することができます。 現在、コードは若干古くなっています。 モダンな実装は 以下に記載されている高速の F4アルゴリズムを使います。
A new efficient algorithm for computing Gröbner bases (F4) Jean-Charles Faugère LIP6/CNRS Université Paris VI January 20, 1999
lex
純粋に辞書式の、 単項式比較のデフォルト順序
grlex
全次数順序。同点は辞書式で決めます。
grevlex
全次数。同点は逆辞書式で決めます。
invlex
逆時書式順序。
Previous: Introduction to grobner [Contents][Index]
デフォルト値: lex
このグローバルスイッチは
どの単項式順序が多項式とGroebner基底計算で使われるか制御します。
もし設定されないなら、 lex
が使われます。
デフォルト値: expression_ring
このスイッチは
grober計算で使われる多項式の係数環を示します。
もし設定されないなら、
maximaの 一般式環が使われます。
もし望むなら、この変数を ring_of_integers
に設定できます。
デフォルト値: false
消去ベース関数で消去される変数のデフォルト順序名。
設定されていないなら、 lex
が使われます。
デフォルト値: false
消去ベース関数で保持される変数のデフォルト順序名。
設定されていないなら、 lex
が使われます。
デフォルト値: false
消去計算で使われるデフォルト消去順序名。
設定されているなら、
変数 poly_primary_elimination_order
と
poly_secondary_elimination_order
の設定を上書きします。
ユーザーは
これが消去変数の数に有効な真の消去順序であることを保証しなければいけません。
デフォルト値: false
もし true
に設定されているなら、
このパッケージの関数すべては
maxima一般式ではなく、
それぞれの多項式を
現在の単項式順序で並べた項のリストとして返します。
デフォルト値: false
もし true
に設定されているなら、
デバッグ用、トレース用出力を生成します。
デフォルト値: buchberger
可能な値:
buchberger
parallel_buchberger
gebauer_moeller
Groebner基底を見つけるのに使われるアルゴリズム名。
デフォルト値: false
もし false
でないなら、
可能な時はいつでも、頭項簡約を使います。
頭項簡約は、割り算アルゴリズムが最初の簡約後に停止することを意味します。
poly_add
, poly_subtract
, poly_multiply
, poly_expt
は
多項式の算出演算子です。
これらは
内部表現を使って実行されますが、
結果は
maxima一般形式に変換されます。
2つの多項式 poly1と poly2を足します。
(%i1) poly_add(z+x^2*y,x-z,[x,y,z]); 2 (%o1) x y + x
多項式 poly1から poly2を引きます。
(%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]); 2 (%o1) 2 z + x y - x
多項式 poly1と poly2の積を返します。
(%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand; (%o1) 0
2つの多項式 poly1と poly2の シジジー多項式 (S多項式)を返します。
多項式 poly1を係数のGCDで割ったものを返します。
(%i1) poly_primitive_part(35*y+21*x,[x,y]); (%o1) 5 y + 3 x
多項式 poly1を主係数で割ったものを返します。 割り算が可能であることを仮定しています。 これは、体の場合には大丈夫ですが、環の場合にはいつも可能なわけではありません。
この関数は
多項式を内部形式にパースします。
もし polyが多項式を正確にパースしたら、
それは expand(poly)
と同値です。
もし表現が変数 varlistの多項式と互換性がないなら、
結果はエラーです。
式が正確に内部表現にパースするかテストするのに使うことができます。
以下の例は添字付き変数と超越関数変数が許されることを例示します。
(%i1) poly_expand((x-y)*(y+x),[x,y]); 2 2 (%o1) x - y (%i2) poly_expand((y+x)^2,[x,y]); 2 2 (%o2) y + 2 x y + x (%i3) poly_expand((y+x)^5,[x,y]); 5 4 2 3 3 2 4 5 (%o3) y + 5 x y + 10 x y + 10 x y + 5 x y + x (%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]); 2 y x (%o4) - x %e + ------- - 1 sqrt(y) (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]); 2 (%o5) - sin (x) + sin(x) - 1
polyの、正の整数 numberのべき乗を返します。 もし numberが正の整数でないなら、 エラーが生じます。
(%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand; (%o1) 0
poly_content
は係数のGCDを抽出します。
(%i1) poly_content(35*y+21*x,[x,y]); (%o1) 7
多項式 polyを n個の多項式のリスト polylistで擬似的に割ります。 複数の値を返します。 一番目の値は 商のリスト aです。 二番目の値は余り rです。 三番目の値は、 係数環(体である必要はありません)内でpolylistがc*polyを割れるような スカラ係数 cです。 最後に 四番目の値は実行された簡約の回数です。 結果のオブジェクトは以下の等式を満たします:
c*poly=sum(a[i]*polylist[i],i=1...n)+r.
多項式 poly1を多項式 poly2で割ります。 余りのない厳密な割り算が可能と仮定します。 商を返します。
poly_normal_form
は
多項式の集合 polylistに関して
多項式 polyの正規形を見つけます。
Buchberger判定(criterion)を使って
もし polylistが現在の項順序に関して Groebner基底なら
true
を返します:
Buchberger判定(criterion)は、
polylistの2つの多項式 h1と h2すべてに関して、
S多項式 S(h1,h2)が polylistを法として0に簡約されるというものです。
poly_buchberger
は
多項式のリスト上でBuchbergerアルゴリズムを実行し、
結果の Groebner基底を返します。
K[ x[1],...,x[n] ]上のイデアル Iの
k番目の消去イデアル I_kは
イデアル intersect(I, K[ x[k+1],...,x[n] ])です。
コロンイデアル I:Jは
イデアル {h|for all w in J: w*h in I}です。.
イデアル I:p^infはイデアル {h| there is a n in N: p^n*h in I}です。
イデアル I:J^infはイデアル {h| there is a n in N and a p in J: p^n*h in I}です。
The 根基イデアル sqrt(I)はイデアル
{h| there is a n in N : h^n in I }です。
poly_reduction
は多項式のリスト polylistを簡約します。
それぞれの多項式は他の多項式で完全に簡約されます。
polylistと同じ単項式イデアルの最小全域である、 多項式リスト polylistの部分リストを返します。 すなわち、部分リストの中の多項式の主単項式はすべて、他の多項式の主単項式を割りません。
poly_normalize_list
は
poly_normalize
をリストの中の多項式それぞれに適用します。
これは
リスト polylistの中のすべての多項式を主係数で割ることを意味します。
多項式リスト polylistで張られたイデアルのGroebner基底を返します。 グローバルフラグで影響を受けます。
多項式リスト polylistで張られたイデアルの簡約Groebner基底を返します。
poly_depends
は多項式が変数 varに依存するかテストします。
poly_elimination_ideal
は、
(必ずしもGroebner基底である必要はない)生成多項式のリストとして指定されたイデアルの
number番目の消去イデアルの
Groebner基底を返します。
コロンイデアル
I(polylist1):I(polylist2)
の簡約Groebner基底を返します。
ここで、 polylist1と polylist2は2つの多項式リストです。
poly_ideal_intersection
は2つのイデアルの交わりです。
poly1と poly2の最小公倍数(式)を返します。
poly1と poly2の最大公約数(式)を返します。
ezgcd
, gcd
, gcdex
, gcdivide
も参照してください。
例:
(%i1) p1:6*x^3+19*x^2+19*x+6; 3 2 (%o1) 6 x + 19 x + 19 x + 6 (%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x; 5 4 3 2 (%o2) 6 x + 13 x + 12 x + 13 x + 6 x (%i3) poly_gcd(p1, p2, [x]); 2 (%o3) 6 x + 13 x + 6
poly_grobner_equal
は
2つの Groebner基底が同じイデアルを生成するか
テストします。
もし、Groebner基底と仮定された2つの多項式リスト polylist1と polylist2が
同じイデアルを生成するなら、true
を返します。
そうでないなら、 false
を返します。
これは、
一番目の基底のすべての多項式が二番目の基底を法として0に簡約されるかとその逆をチェックする
ことと同値です。
以下の例では、一番目のリストがGroebner基底でないので
結果が false
であることに注意してください。
(%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]); (%o1) false
poly_grobner_subsetp
は
polylist1が生成するイデアルが
polylist2が生成するイデアルに含まれるかテストします。
このテストが常に成功するには、polylist2が Groebner基底でなければいけません。
もし多項式 polyが
Groebner基底であると仮定された多項式リスト polylistが生成するイデアルに属するなら、
true
を返します。
そうでないなら、 false
を返します。
poly_grobner_member
は
多項式が
Groebner基底であると仮定された多項式のリストが生成するイデアルに属するかテストします。
normal_form
が0と同値です。
イデアル
I(polylist):poly^inf のsaturationの簡約 Groebner基底を返します。
幾何学的に、代数的閉体上で、 これは polyの多様体上で恒等的に0とならない polylistが生成するイデアルの中の 多項式の集合です。
イデアル
I(polylist1):I(polylist2)^inf のsaturationの簡約 Groebner基底を返します。
幾何学的に、代数的閉体上で、 これは polylist2の多様体上で恒等的に0とならない polylist1が生成するイデアルの中の 多項式の集合です。
polylist2は2個の多項式のリスト [poly1,...,polyn]
です。
多項式リスト polylist1が生成するイデアルの
多項式リスト polylist2の多項式に関する連続saturationの列によって得られるイデアル
I(polylist):poly1^inf:...:polyn^inf
の簡約 Groebner基底を返します。
polylistlistは多項式リストn個のリスト [polylist1,...,polylistn]
です。
イデアル
I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf のsaturationの簡約 Groebner基底を返します。
poly_saturation_extension
は有名な Rabinowitzのトリックを実装します。