児玉 です.

*** 内容1  _.x
From: toyofuku / juice.or.jp
Subject: [ruby-math:00235] Re: Polynomial of multi variable
Date: Thu, 3 Feb 2000 20:22:51 +0900
Message-ID: <200002031122.UAA04861 / fermat.mrisys.co.jp>
>   豊福です。
....
>   _ = Object.new
>   def _.method_missing(*a)
>     PolynomialM(a[0].id2name)
>   end
> 
>   a = (_.x**2 - _.y**2) / (_.x - _.y)
> 
>   print a, "\n" # => "x+y"

う-ん, 過激.  地の文で 多項式が書けちゃう.
こんな事もできるのかぁ. 面白そうなので,
"P_" として polynomialm.rb の先頭に書いてみました.
また, PolynomialM を PolyM でalias してみました.
単に表現上の問題ですが,
場合によっては, P_.x 方式の方が簡潔にかける.
どうでしょうか?

a = PolynomialM("(x**2 - y**2) / (x - y)")
a = PolyM("(x**2 - y**2) / (x - y)")
a = (P_.x**2 - P_.y**2) / (P_.x - P_.y)
#
b = a + PolynomialM("x")
b = a + PolyM("x")
b = a + P_.x

Risa/Asir の例だと,
小文字で始まるなら   "多項式の自由変数",
大文字で始まるなら   "プログラミング言語としての変数",
となっていて, 上に対応させると,
   A = (x**2 - y**2)/(x - y);
   B = A + x;
のように書けるらしい.
また,変数名の自動作成での i番目の自由変数を _i ( _5 とか)と書ける.
そういう意味では,  P_. で始まれば, 多項式の変数,というのも,良いかも.


*** 内容2  Z係数多項式のイデアルは Ruby で.
他の(Maple,Mathematica等)ソフトでは
Z係数のグレブナ−ベ−スは計算できないはず.
   (自力でプログラムする場合を除けば)
# メジャ−なソフトに組み込まれていないのは
# 普通には需要が無いからとも云える?

多変数で Integer 係数の
reduced minimal strong Groebner basis の計算をサポ−ト.
これで係数は Numeric と Z/pZ(p:素数) まで
Groebner base をサポ−トできた.
# 凝ったことをするよりも,とりあえず動くことを目標にしたので,
# かなり遅い感じだけど, 手計算よりはましかな?


P.S.
有理式も作成.(class RationalPoly(1変数), class RationalPolyM(多変数))
元になった rational.rb が素直な造りなので簡単.
-- 
K.Kodama(kodama / kobe-kosen.ac.jp)