[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

# 57. grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 57.1 Introduction to grobner

`grobner`は MaximaでGroebner基底を使うためのパッケージです。

Groebner基底に関するチュートリアルは以下で見つかります。

http://www.geocities.com/CapeCanaveral/Hall/3131/

以下の関数を使うには、‘`grobner.lisp`’パッケージをロードしなければいけません。

    load(grobner);

    demo("grobner.demo");

もしくは

    batch("grobner.demo")

でデモを開始することができます。

デモの中の計算のいくつかは長い時間かかります。 だから、デモの出力 ‘`grobner-demo.output`’が デモファイルと同じディレクトリに見つかります。

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.1.1 Notes on the grobner package

パッケージは

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

·

Categories: Groebner bases ·Share packages ·Package grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.1.2 Implementations of admissible monomial orders in grobner

- `lex`

  純粋に辞書式の、 単項式比較のデフォルト順序

- `grlex`

  全次数順序。同点は辞書式で決めます。

- `grevlex`

  全次数。同点は逆辞書式で決めます。

- `invlex`

  逆時書式順序。

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 57.2 Functions and Variables for grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.2.1 Global switches for grobner

オブション変数: poly_monomial_order

  デフォルト値: `lex`

  このグローバルスイッチは どの単項式順序が多項式とGroebner基底計算で使われるか制御します。 もし設定されないなら、 `lex`が使われます。

  ·

  Categories: Package grobner

オブション変数: poly_coefficient_ring

  デフォルト値: `expression_ring`

  このスイッチは grober計算で使われる多項式の係数環を示します。 もし設定されないなら、 maximaの 一般式環が使われます。 もし望むなら、この変数を `ring_of_integers`に設定できます。

  ·

  Categories: Package grobner

オブション変数: poly_primary_elimination_order

  デフォルト値: `false`

  消去ベース関数で消去される変数のデフォルト順序名。 設定されていないなら、 `lex`が使われます。

  ·

  Categories: Package grobner

オブション変数: poly_secondary_elimination_order

  デフォルト値: `false`

  消去ベース関数で保持される変数のデフォルト順序名。 設定されていないなら、 `lex`が使われます。

  ·

  Categories: Package grobner

オブション変数: poly_elimination_order

  デフォルト値: `false`

  消去計算で使われるデフォルト消去順序名。 設定されているなら、 変数 `poly_primary_elimination_order`と `poly_secondary_elimination_order`の設定を上書きします。 ユーザーは これが消去変数の数に有効な真の消去順序であることを保証しなければいけません。

  ·

  Categories: Package grobner

オブション変数: poly_return_term_list

  デフォルト値: `false`

  もし `true`に設定されているなら、 このパッケージの関数すべては maxima一般式ではなく、 それぞれの多項式を 現在の単項式順序で並べた項のリストとして返します。

  ·

  Categories: Package grobner

オブション変数: poly_grobner_debug

  デフォルト値: `false`

  もし `true`に設定されているなら、 デバッグ用、トレース用出力を生成します。

  ·

  Categories: Package grobner

オブション変数: poly_grobner_algorithm

  デフォルト値: `buchberger`

  可能な値:

  - `buchberger`
  - `parallel_buchberger`
  - `gebauer_moeller`

  Groebner基底を見つけるのに使われるアルゴリズム名。

  ·

  Categories: Package grobner

オブション変数: poly_top_reduction_only

  デフォルト値: `false`

  もし `false`でないなら、 可能な時はいつでも、頭項簡約を使います。 頭項簡約は、割り算アルゴリズムが最初の簡約後に停止することを意味します。

  ·

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.2.2 Simple operators in grobner

`poly_add`, `poly_subtract`, `poly_multiply`, `poly_expt`は 多項式の算出演算子です。 これらは 内部表現を使って実行されますが、 結果は maxima一般形式に変換されます。

関数: poly_add (poly1, poly2, varlist)

  2つの多項式 poly1と poly2を足します。

      (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
                                          2
      (%o1)                              x  y + x

  ·

  Categories: Package grobner

関数: poly_subtract (poly1, poly2, varlist)

  多項式 poly1から poly2を引きます。

      (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
                                            2
      (%o1)                          2 z + x  y - x

  ·

  Categories: Package grobner

関数: poly_multiply (poly1, poly2, varlist)

  多項式 poly1と poly2の積を返します。

      (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
      (%o1)                                  0

  ·

  Categories: Package grobner

関数: poly_s_polynomial (poly1, poly2, varlist)

  2つの多項式 poly1と poly2の シジジー多項式 (S多項式)を返します。

  ·

  Categories: Package grobner

関数: poly_primitive_part (poly1, varlist)

  多項式 poly1を係数のGCDで割ったものを返します。

      (%i1) poly_primitive_part(35*y+21*x,[x,y]);
      (%o1)                              5 y + 3 x

  ·

  Categories: Package grobner

関数: poly_normalize (poly, varlist)

  多項式 poly1を主係数で割ったものを返します。 割り算が可能であることを仮定しています。 これは、体の場合には大丈夫ですが、環の場合にはいつも可能なわけではありません。

  ·

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.2.3 Other functions in grobner

関数: poly_expand (poly, varlist)

  この関数は 多項式を内部形式にパースします。 もし 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

  ·

  Categories: Package grobner

関数: poly_expt (poly, number, varlist)

  polyの、正の整数 numberのべき乗を返します。 もし numberが正の整数でないなら、 エラーが生じます。

      (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
      (%o1)                                  0

  ·

  Categories: Package grobner

関数: poly_content (poly. varlist)

  `poly_content`は係数のGCDを抽出します。

      (%i1) poly_content(35*y+21*x,[x,y]);
      (%o1)                                  7

  ·

  Categories: Package grobner

関数: poly_pseudo_divide (poly, polylist, varlist)

  多項式 polyを n個の多項式のリスト polylistで擬似的に割ります。 複数の値を返します。 一番目の値は 商のリスト aです。 二番目の値は余り rです。 三番目の値は、 係数環(体である必要はありません)内でpolylistがc*polyを割れるような スカラ係数 cです。 最後に 四番目の値は実行された簡約の回数です。 結果のオブジェクトは以下の等式を満たします:

  c*poly=sum(a[i]*polylist[i],i=1...n)+r.

  ·

  Categories: Package grobner

関数: poly_exact_divide (poly1, poly2, varlist)

  多項式 poly1を多項式 poly2で割ります。 余りのない厳密な割り算が可能と仮定します。 商を返します。

  ·

  Categories: Package grobner

関数: poly_normal_form (poly, polylist, varlist)

  `poly_normal_form`は 多項式の集合 polylistに関して 多項式 polyの正規形を見つけます。

  ·

  Categories: Package grobner

関数: poly_buchberger_criterion (polylist, varlist)

  Buchberger判定(criterion)を使って もし polylistが現在の項順序に関して Groebner基底なら `true`を返します: Buchberger判定(criterion)は、 polylistの2つの多項式 h1と h2すべてに関して、 S多項式 S(h1,h2)が polylistを法として0に簡約されるというものです。

  ·

  Categories: Package grobner

関数: poly_buchberger (polylist_fl varlist)

  `poly_buchberger`は 多項式のリスト上でBuchbergerアルゴリズムを実行し、 結果の Groebner基底を返します。

  ·

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

### 57.2.4 Standard postprocessing of Groebner Bases

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, varlist)

  `poly_reduction`は多項式のリスト polylistを簡約します。 それぞれの多項式は他の多項式で完全に簡約されます。

  ·

  Categories: Package grobner

関数: poly_minimization (polylist, varlist)

  polylistと同じ単項式イデアルの最小全域である、 多項式リスト polylistの部分リストを返します。 すなわち、部分リストの中の多項式の主単項式はすべて、他の多項式の主単項式を割りません。

  ·

  Categories: Package grobner

関数: poly_normalize_list (polylist, varlist)

  `poly_normalize_list`は `poly_normalize`をリストの中の多項式それぞれに適用します。 これは リスト polylistの中のすべての多項式を主係数で割ることを意味します。

  ·

  Categories: Package grobner

関数: poly_grobner (polylist, varlist)

  多項式リスト polylistで張られたイデアルのGroebner基底を返します。 グローバルフラグで影響を受けます。

  ·

  Categories: Package grobner

関数: poly_reduced_grobner (polylist, varlist)

  多項式リスト polylistで張られたイデアルの簡約Groebner基底を返します。

  ·

  Categories: Package grobner

関数: poly_depends_p (poly, var, varlist)

  `poly_depends`は多項式が変数 varに依存するかテストします。

  ·

  Categories: Package grobner ·Predicate functions

関数: poly_elimination_ideal (polylist, number, varlist)

  `poly_elimination_ideal`は、 (必ずしもGroebner基底である必要はない)生成多項式のリストとして指定されたイデアルの number番目の消去イデアルの Groebner基底を返します。

  ·

  Categories: Package grobner

関数: poly_colon_ideal (polylist1, polylist2, varlist)

  コロンイデアル

  I(polylist1):I(polylist2)

  の簡約Groebner基底を返します。

  ここで、 polylist1と polylist2は2つの多項式リストです。

  ·

  Categories: Package grobner

関数: poly_ideal_intersection (polylist1, polylist2, varlist)

  `poly_ideal_intersection`は2つのイデアルの交わりです。

  ·

  Categories: Package grobner

関数: poly_lcm (poly1, poly2, varlist)

  poly1と poly2の最小公倍数(式)を返します。

  ·

  Categories: Package grobner

関数: poly_gcd (poly1, poly2, varlist)

  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

  ·

  Categories: Package grobner

関数: poly_grobner_equal (polylist1, polylist2, varlist)

  `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

  ·

  Categories: Package grobner

関数: poly_grobner_subsetp (polylist1, polylist2, varlist)

  `poly_grobner_subsetp`は polylist1が生成するイデアルが polylist2が生成するイデアルに含まれるかテストします。 このテストが常に成功するには、polylist2が Groebner基底でなければいけません。

  ·

  Categories: Package grobner ·Predicate functions

関数: poly_grobner_member (poly, polylist, varlist)

  もし多項式 polyが Groebner基底であると仮定された多項式リスト polylistが生成するイデアルに属するなら、 `true`を返します。 そうでないなら、 `false`を返します。

  `poly_grobner_member`は 多項式が Groebner基底であると仮定された多項式のリストが生成するイデアルに属するかテストします。 `normal_form`が0と同値です。

  ·

  Categories: Package grobner

関数: poly_ideal_saturation1 (polylist, poly, varlist)

  イデアル

  I(polylist):poly^inf のsaturationの簡約 Groebner基底を返します。

  幾何学的に、代数的閉体上で、 これは polyの多様体上で恒等的に0とならない polylistが生成するイデアルの中の 多項式の集合です。

  ·

  Categories: Package grobner

関数: poly_ideal_saturation (polylist1, polylist2, varlist)

  イデアル

  I(polylist1):I(polylist2)^inf のsaturationの簡約 Groebner基底を返します。

  幾何学的に、代数的閉体上で、 これは polylist2の多様体上で恒等的に0とならない polylist1が生成するイデアルの中の 多項式の集合です。

  ·

  Categories: Package grobner

関数: poly_ideal_polysaturation1 (polylist1, polylist2, varlist)

  polylist2は2個の多項式のリスト `[poly1,...,polyn]`です。 多項式リスト polylist1が生成するイデアルの 多項式リスト polylist2の多項式に関する連続saturationの列によって得られるイデアル

  I(polylist):poly1^inf:...:polyn^inf

  の簡約 Groebner基底を返します。

  ·

  Categories: Package grobner

関数: poly_ideal_polysaturation (polylist, polylistlist, varlist)

  polylistlistは多項式リストn個のリスト `[polylist1,...,polylistn]`です。 イデアル

  I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf のsaturationの簡約 Groebner基底を返します。

  ·

  Categories: Package grobner

関数: poly_saturation_extension (poly, polylist, varlist1, varlist2)

  `poly_saturation_extension`は有名な Rabinowitzのトリックを実装します。

  ·

  Categories: Package grobner

関数: poly_polysaturation_extension (poly, polylist, varlist1, varlist2)
  ·

  Categories: Package grobner

[ << ] | [ >> ] |  |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

この文書は市川 雄二によって2012年1月月5日にtexi2html 1.82を用いて生成されました。