児玉 です. 

From: rubikitch <takashi / oishi.info.waseda.ac.jp>
Subject: [ruby-math:00203] Re: Polynomial of multi variable
Date: Mon, 31 Jan 2000 16:46:40 +0900
Message-ID: <20000131164640Z.takashi / localhost>
> > ユ−クリッドの互除法アルゴリズムの多項式への拡張.
> 
> 最大公約数みたいなものですかね。

まあそうですが,
行列(線形方程式)で互除法をやってみると,
行(式)を他の行(他の式)で割った余りで置き換える事に対応し,
通常の消去法になるわけです.
そういう意味で
行列(線形方程式)の消去法はユ−クリッドの互除法の拡張と云えます.
これを更に代数方程式に拡張するわけです.

> > 連立線形方程式をグレブナ−ベ−スで解く事もできるようです.
> > # 普通は 行列の変形で解くけど, 効率を無視するなら....
> 
> こんな方法もあるんだ。
> 一番いいのが LU 分解を使って求めるやり方が一般的ですよね。

そりゃそうですね.
多項式に一般化したため, 1次式に適用すると,
普通の行列による解法よりかなり不利になるはず.

*** ちょっと実験.
x+y+2z-2 =0, 2x+3y+6z-5 =0, 3x+2y+4z-5 =0 
の連立をグレブナ−ベ−スで解く.
-------  Ruby のコ−ド ----
#!/usr/local/bin/ruby 
require "polynomialm"
#  式の設定
f1="x+y+2z-2".to_polyM; f2="2x+3y+6z-5".to_polyM; f3="3x+2y+4z-5".to_polyM
#  Groebner base を求める
gb=GBase.getGBase([f1,f2,f3])
printf "%s, %s, %s\n",f1,f2,f3
printf "Groebner basis: %s\n",gb.join(", ")
-------結果---------
x+y+2z-2, 2x+3y+6z-5, 3x+2y+4z-5
Groebner basis: x-1, y+2z-1
--------ここまで--------
解は,  x-1=0, y+2z-1=0  とわかります.
こういう感じで 代数式の簡約を行うわけです.
-- 
K.Kodama(kodama / kobe-kosen.ac.jp)