2 次正方行列の累乗の次数減らし を Ruby で実装し、その方法で実際に行列の累乗を求めてみるよ。
require 'matrix' require 'mathn' class Matrix def my_power(n) # for 2 * 2 matrix def t(n) def combination(n, m) if m == 0 or m == n return 1 else return combination(n - 1, m - 1) + combination(n - 1, m) end end sum = 0 (1..(n + 1) / 2).each{|k| sum += combination(n - k, k - 1) * (self.tr ** (n - 2 * k + 1)) * ((-self.det) ** (k - 1)) } return sum end return t(n) * self - t(n - 1) * self.det * Matrix.I(2) end end a = Matrix[[-4.6, -2.2], [2.1, 4.3]] b = Matrix[[0, -3], [-1, 3]] p a ** 4 # Matrix[[273.1558, 20.0705999999999], [-19.1583, 191.9611]] p a.my_power(4) # Matrix[[273.1558, 20.0706], [-19.1583, 191.9611]] p b ** 17 # Matrix[[1192888215, -4522582593], [-1507527531, 5715470808]] p b.my_power(17) # Matrix[[1192888215, -4522582593], [-1507527531, 5715470808]]
従来の方法と比べても計算は合ってるようだけど、全然使い道がないね。