[#38470] ruby-dev summary 21403-21530 (draft) — Minero Aoki <aamine@...>

青木です。

25 messages 2003/10/07
[#38475] Re: ruby-dev summary 21403-21530 (draft) — maili31s@... (SugHimsi==SUGIHARA Hiroshi) 2003/10/07

すぎむし。

[#38480] Re: ruby-dev summary 21403-21530 (draft) — Minero Aoki <aamine@...> 2003/10/08

青木です。

[#38481] marshal_dump (was Re: ) — m_seki@... 2003/10/08

[#38484] Re: marshal_dump (was Re: ) — matz@... (Yukihiro Matsumoto) 2003/10/09

まつもと ゆきひろです

[#38486] Re: marshal_dump (was Re: ) — Masatoshi Seki <m_seki@...> 2003/10/09

咳といいます

[#38489] exit status on exit! — YANAGAWA Kazuhisa <kjana@...4lab.to>

<http://www.unixuser.org/~ysjj/diary/?200310a&to=200310082#200310082>

29 messages 2003/10/09
[#38490] Re: exit status on exit! — Koji Arai <JCA02266@...> 2003/10/09

新井です。

[#38503] Re: exit status on exit! — YANAGAWA Kazuhisa <kjana@...4lab.to> 2003/10/10

In Message-Id: <20031010.082218.74733862.JCA02266@nifty.ne.jp>

[#38505] Re: exit status on exit! — Koji Arai <JCA02266@...> 2003/10/10

新井です。

[#38507] Re: exit status on exit! — matz@... (Yukihiro Matsumoto) 2003/10/11

まつもと ゆきひろです

[#38514] Re: exit status on exit! — YANAGAWA Kazuhisa <kjana@...4lab.to> 2003/10/11

In Message-Id: <1065883639.405037.23137.nullmailer@picachu.netlab.jp>

[#38515] Re: exit status on exit! — WATANABE Hirofumi <eban@...> 2003/10/11

わたなべです。

[ruby-list:38451] Re: 複素数を考慮したVectorクラス

From: Shin-ichiro HARA <sinara@...>
Date: 2003-10-02 03:57:00 UTC
List: ruby-list #38451
原です。

In [ruby-list:38449] TANAKA wrote:

> >Vectorを作った後でcomplex.rbがロードされることも考えられるので、
> >初期化時点で決定するのは望ましくないような気がします。
> ということは、inner_productメソッドの定義のはじめに
> @comp = defined?(Complex) if !@comp
> といった処理を書くべきでしょうか。

そういうことですね。ただしここの comp はローカル変数でいいで
しょう。それから、足し算毎に comp を評価するコストはかけ算な
どに比べて低いので、あまり気にしなくていいかも。

> >Complexにはabs2というメソッドがあるので、Numericにも self*self 
> >という形でabs2が定義されていれば
> これは、matrix.rbに
> class Numeric
>   def abs2
>     self * self
>   end
> end
> を追加すればよい、ということでしょうか。

そうですね。で、その上で

    v = 0
    for e in @elements
      v += e.abs2
    end
    Math.sqrt(v)

を Vector#r の定義とするわけです。ほんとは r は inner_product 
を使って定義されるのがきれいですけど。


ところで、もともとの田中さんの Vector#inner_product は複素ベ
クトルに対応してないのは不整備ではないかという問題は、なかな
か難しい話で、どういう系でものを考えているか決まらないと、ど
う処理していいか決まらないので、しかたない所もあります。

そもそも Vector の各要素を、ユーザーが実数として扱いたいのか
複素数として扱いたいのか分からないですよね。4元数体の元かも
しれないし、まったく別のオブジェクトとして扱いたいのかもしれ
ない。

でもまあ、現実的な対処法としては、今回のようにするか、

(1) Vector#inner_product はそのままにしておいて、

    Class Vector
      def conjugate
        map{|x| x.conjugate}
      end
    end

  を用意して、その都度 a.conjugate.inner_product(b) とする。

(2) Vector#compex_inner_product を作る。

(3) ComplexVector クラスを作る。

(4) ライブラリ import-module や scope-in-state を使って一時的
  に定義をすげ替える。

といったところでしょうか。いや、もっと色んな方法があると思う
のだけど、なかなかこれで決定というのはないみたいです。


In This Thread