行列の積
class Array def mul(x) m = self.size - 1 n = x.size - 1 c = Array.new(m + 1) c.each_index {|i| c[i] = Array.new(m + 1, 0)} for i in 0..m for j in 0..m for k in 0..n c[i][j] += self[i][k] * x[k][j] end end end c end end a = [[-1, -1, 2], [-1, 2, -1], [2, -1, -1]] b = [[2, -1, 0], [-1, 2, -1], [0, -1, 2]] p a.mul(b) #=>[[-1, -3, 5], [-4, 6, -4], [5, -3, -1]] a = [[1, 2, 2], [2, 1, 1]] b = [[1, 1], [1, 2], [2, 1]] p a.mul(b) #=>[[7, 7], [5, 5]] p b.mul(a) #=>[[3, 3, 3], [5, 4, 4], [4, 5, 5]]
標準添付ライブラリには Matrix クラスがあります。