花谷です
指数が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