require "algebra"
M = SquareMatrix(Rational, 3)
a = M[[1,-1,-1], [-1,1,-1], [2,1,-1]]
puts "A = "; a.display; puts
#A =
# 1, -1, -1
# -1, 1, -1
# 2, 1, -1
e = a.diagonalize
puts "Charactoristic Poly.: #{e.chpoly} => #{e.facts}";puts
#Charactoristic Poly.: t^3 - t^2 + t - 6 => (t - 2)(t^2 + t + 3)
puts "Algebraic Numbers:"
e.roots.each do |po, rs|
puts "#{rs.join(', ')} : roots of #{po} == 0"
end; puts
#Algebraic Numbers:
#a, -a - 1 : roots of t^2 + t + 3 == 0
puts "EigenSpaces: "
e.evalues.uniq.each do |ev|
puts "W_{#{ev}} = <#{e.espaces[ev].join(', ')}>"
end; puts
#EigenSpaces:
#W_{2} = <[4, -5, 1]>
#W_{a} = <[1/3a + 1/3, 1/3a + 1/3, 1]>
#W_{-a - 1} = <[-1/3a, -1/3a, 1]>
puts "Trans. Matrix:"
puts "P ="
e.tmatrix.display; puts
puts "P^-1 * A * P = "; (e.tmatrix.inverse * a * e.tmatrix).display; puts
#P =
# 4, 1/3a + 1/3, -1/3a
# -5, 1/3a + 1/3, -1/3a
# 1, 1, 1
#
#P^-1 * A * P =
# 2, 0, 0
# 0, a, 0
# 0, 0, -a - 1
syntax highlighted by Code2HTML, v. 0.9.1