require "algebra/algebra"
# jordan form が
# 2 1
# 0 2
#     a  0
#     0 -a
#となるものを作りたい

P = Polynomial(Rational, "x")
x = P.var
MR = SquareMatrix(Rational, 4)

def trans(m, i, j, c)
  m.mix_r!(i, j, c)
  m.mix_c!(j, i, -c)
  m
end
=begin
m = MR[
  [2, 1, 0, 0],
  [0, 2, 0, 0],
  [0, 0, 0, 2],
  [0, 0, -2, 0]
]
m.display; puts
trans(m, 1, 2, 1)
trans(m, 3, 1, 1)
trans(m, 1, 0, -1)
trans(m, 1, 3, -1)
m.display; puts
=end
m = MR[
  [3,   1,  -1,   1],
  [-3,  -1,   3,  -1],
  [-2,  -2,   0,   0],
  [0,   0,  -4,   2]
]
m.display; puts

m.jordan_form.display; puts


syntax highlighted by Code2HTML, v. 0.9.1