児玉 です.

From: IKEGAMI Daisuke <daisu-ik / is.aist-nara.ac.jp>
Subject: [ruby-math:00362] Re: one/zero for algebraic class
Date: Tue, 05 Sep 2000 10:30:33 +0900
Message-ID: <200009050130.KAA31530 / alpha155.aist-nara.ac.jp>

> いけがみです.
> 
> From: "K.Kodama" <kdm / kobe-kosen.ac.jp>
> Subject: [ruby-math:00361] Re: one/zero for algebraic class
> Date: Tue, 05 Sep 2000 08:58:34 +0900
> > 係数環毎に Polynomial を書き換えるのとは __逆に__,
> > パラメ−タ−として係数環を与えるように
> > f=Polynomial("3 x**2 + x + 1",Integer) # Z[x] とみなす
> > g=Polynomial("3 x**2 + x + 1", Complex) # C[x] とみなす
> > のように Polynomial を変更して,
> > 一方で, 環の方で one, zero を実装しておくと
> > なんとかなるか? と思ったわけ.
> 
> なるほど,それは直観で普段やってることと合います.


これはまずいようなので...


> ところで,代数クラスを initialize しないと zero や one が決まらないケース
> もあると思います.(とても病的な例ですけれど)
>  . 行列環 
>  . 対称群 ... サイズが決まらないと zero, one が決まらない
> こんなのを係数とする多項式はそうそう考えないと思いますけれど,
> zero や one の活用は多項式クラスにとどまらないような気もします.


多項式の場合の代案です.
多項式はこれで, (多分) 対応できるはずだけど,
他の応用でどうかは良く分からない.
OK のような気はするけど.

> > g=Polynomial("3 x**2 + x + 1", Complex) # C[x] とみなす
のように係数環クラスを与えるかわりに

def Polynomial( p, one=1 ) 
  @one=one; @zero=one-one;
  ....

のように インスタンス生成時に
係数環の1元を与えることにして(デフォルトで Integer の 1)
以下のように使う:

g=Polynomial("3 x**2 + x + 1", Complex(1) )

これなら, 行列環等のサイズの問題とかもなんとかなりそう.

1元を作っておいて与えれば良いので,
係数環クラスの方で 1元,0元を返すようになっていなくても対応できる.
-- 
K.Kodama(kodama / kobe-kosen.ac.jp)