require "algebra"
M4 = SquareMatrix(Rational, 4)
m = M4[
[-1, 1, 2, -1],
[-5, 3, 4, -2],
[3, -1, 0, 1],
[5, -2, -2, 3]
]
m.jordan_form.display; #=>
# 2, 0, 0, 0
# 0, 1, 1, 0
# 0, 0, 1, 1
# 0, 0, 0, 1
puts
#-----------------------------------
m = M4[
[3, 1, -1, 1],
[-3, -1, 3, -1],
[-2, -2, 0, 0],
[0, 0, -4, 2]
]
jf, pt, qt, field, modulus = m.jordan_form_info
p modulus #=> [a^2 + 4]
jf.display; puts #=>
# 2, 1, 0, 0
# 0, 2, 0, 0
# 0, 0, a, 0
# 0, 0, 0, -a
m = m.convert_to(jf.class)
p jf == pt * m * qt #=> true
#-----------------------------------
m = M4[
[-1, 1, 2, -1],
[-5, 3, 4, -2],
[3, -1, 0, 1],
[5, -2, -2, 0]
]
jf, pt, qt, field, modulus = m.jordan_form_info
p modulus #=> [a^3 + 3a - 1, b^2 + ab + a^2 + 3]
jf.display; puts #=>
# 2, 0, 0, 0
# 0, a, 0, 0
# 0, 0, b, 0
# 0, 0, 0, -b - a
m = m.convert_to(jf.class)
p jf == pt * m * qt #=> true
syntax highlighted by Code2HTML, v. 0.9.1