From: "K.Kodama" <kdm / kobe-kosen.ac.jp>
Subject: [ruby-math:00215] Re: Polynomial of multi variable
Date: Wed, 02 Feb 2000 08:28:36 +0900

> 行列(線形方程式)の消去法はユ−クリッドの互除法の拡張と云えます.
> これを更に代数方程式に拡張するわけです.

なるほど。

> *** ちょっと実験.
> 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(", ")

何やってるのかはっきりとわかるなぁ。
やっぱり Ruby はすばらしい!!

多項式の表示も自然だから、さっそくいただき♪

> 解は,  x-1=0, y+2z-1=0  とわかります.
> こういう感じで 代数式の簡約を行うわけです.

一般にいえばグレブナーベースは((式の数)-1)になるのかな?
しかも文字の数が減ってるし。
ちなみに、自作行列ライブラリで解かしたらこの通り。
でも精度めちゃ悪いや(><)
今後の課題かな。

irb(main):030:0> DMatrix::solve(DMatrix[[1,1,2],[2,3,6],[3,2,4]],VV[2,5,5])

DM[[ 1.00000000000000000000 ],
   [ -2.98540145985401439432 ],
   [ 1.99270072992700719716 ]]

るびきち☆