原です。

In message "[ruby-math:00671] Re: power"
    on 02/04/06, Yoichi Hanatani <t29x0595 / ip.media.kyoto-u.ac.jp> writes:
|
|花谷です
|指数が0の時は、逆行列を先に計算すると勿体ないような気がします。

ああ、確かに 0 の時はもったいないですね。

|こんなのはどうですか?
|  def ** (other)
|     if other.kind_of?(Integer)
|       x = self
|       if other < 0
|         x = self.inverse
|         other = -other
|       end
|       z = Matrix.identity(self.column_size)
|       while other != 0
|         z *= x if other & 1 != 0
|         x *= x
|         other >>= 1
|       end
|       z

これが一番きれいなのですが、必ず Identity * x というしなく
てもいい計算をしてしまいます。そこで先のは n = other - 1 
みたいなことをしているわけです。

そこのところ、きれいな解決ってあるでしょうか?