いけがみです。

[ruby-list:30703] で提案した LU 分解について補足します。

LU 分解をひとつのメソッドとして与えておくと、
determinant, rank, inverse の各メソッドの内部が統一されます。

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

LU分解は上に挙げた以上に、応用がいろいろあります。
るびきちさんの mathx でも LU分解を利用できますが、
matrix.rb でもちょっとしたコードを追加するだけで 
LU 分解による恩恵を受けることができると思うんです。
つべこべ言わんとコードを書け、と言われそうですが。

以下は余録:

LU分解についての簡単な説明(線形代数の教科書に載ってることもある)

  任意の行列 A について、
  P : 置換行列、 L : 単位下三角行列、 U : 上三角行列 の組で、
     P * A = L * U
  を満たすものがかならずある。この P, L, U を見つけ出すことを LU 分解という。
  (本によっては LUP 分解とか PLU 分解とか言ったりします)

  P, L, U は基本的な変形(matrix.rb の rank で行なっているようなループと
  四則演算だけ)で見つけることができる。
  計算量が少なく、かつ上記(2)の問題を回避するようなアルゴリズムが知られている。

LU分解に関する日本語のテキストだと、手元にあるのは
  アルゴリズムイントロダクション 第3巻 精選トピックス
  Thomas H. Cormen, Charles E. Leiserson and Ronald L. Rivest,
  浅野哲夫、岩野和生、梅尾博司、山下雅史、和田幸一共訳
  近代科学社 ISBN 4-7649-0247-8
がよかったです。1, 2巻もあわせて、面白かったけどそれは本論とは関係ないか。
興味のある人は google などで検索してもいいかもしれない。

修士のとき LU 分解のサーベイなどもしたので、
LU 分解への特別な思い入れ(好き)があるという個人的な背景もあります。
--
池上 大介
Daisuke IKEGAMI <daisu-ik / is.aist-nara.ac.jp>
奈良先端科学技術大学院大学 情報科学研究科
情報処理学専攻 情報基礎学講座 関研究室