はじめまして、常定(つねさだ)と申します。
  
  最初の池上さんの提起(割算、小数・分数問題)とは少し外れるかも
しれませんが、、、

> LU 分解をひとつのメソッドとして与えておくと、
> determinant, rank, inverse の各メソッドの内部が統一されます。
> もしも Matrix を new するときに内部情報として LU 分解した行列を
> ついでに保持することにすると、
> かけ算などのいくつかの演算が高速化されるという利点もつきます。
>   # これはいささかやりすぎか、という気もしないでもない、
>   # 初期化のときに時間がかかることとメモリとのトレードオフです
> また、連立方程式を解くなら LU 分解したほうが速いことが知られています。

  池上さんのおっしゃる通り、メモリに関して気にしないなら、LU 
分解した行列は内部で保持しておくのが better だと思います。例
えば連立方程式を解く際、一度 LU 分解しておけば、次に同じ係数
行列の方程式を解く時は右辺のベクトルを変えるだけよいですから
ね。
  ただ、いきなり new の時にやるよりは、LU 分解を必要とするよ
うなメソッドが最初に呼ばれた時にやるので十分ではないでしょう
か。

  ruby-1.6.4 に matrix.rb というのがあることについては知りま
せんでした。rubikitch さんの mathx も、、、

  実は、私は Numerical Recipes in C (邦訳「C言語による数値計
算のレシピ」、技術評論社) にあるプログラムを技術評論社から FD 
で購入し、これを libNRC.a 化して普段から愛用していまして、現
在はこれを Ruby の拡張ライブラリ NRC.so 化しているところです。
これまで線形計算(LU分解、SVD分解等含む)、特殊関数、FFT、線形
回帰などの関数の Ruby 化を終えています。この中では、自前の 
Matrix クラス(全て値は T_FLOAT, C の double で保持) を作って
います。LU 分解は new では行わず、最初に LU 分解を必要とする
メソッド(逆行列を求めるとか)が呼ばれた時に実行し、その分解し
た行列は捨てずに保持するようにしています。LU 分解が必要なメソ
ッドは、まず LU 分解が求められているかどうかをチェックし、ま
だなら分解を実行、すでに求めてあればこれを使って以後の処理を
実行、という動作をさせます。LU 分解だけを行う(そしてそれを返
す) lu というメソッドも用意して。というわけで、これは池上さん
の仕様を満たしているかな、、、るびきちさんの mathx がどうやっ
ているのかも見てみたかったのですが、
http://www.ruby-lang.org/ja/raa.html からのリンクは切れている
ようですね。

  この Ruby化 NRC を公開しようかとも考えたのですが、Numerical 
Recipes のルーチンは「読者が自分で打ち込んだり、FD で購入する
のはよいが、それらを配布することは認められない」となっていま
す。なので、私の作った拡張ライブラリだけを配布することはもち
ろん問題ないでしょうが、これを利用できる人がどれだけいるかな?
今は自分だけでこっそり使っています。もし、Numerical Recipes 
ルーチンをお持ちで興味がおありの方がいらっしゃれば、ご連絡下
さい。mathx で使っている LAPACK というのはフリーなんですね? 
だとすれば出る幕ないかなあ。

----------------------------------------------------------------
  Ruby の開発者、contributers、Ruby hackers 諸氏に感謝します。

  常定 芳基     Yoshiki Tsunesada   
     Department of Physics, Tokyo Institute of Technology
     yoshiki / cr.phys.titech.ac.jp