require "rubyunit"
require "algebra/rational"
class Rational;def inspect; to_s; end;end
#class Rational < Numeric;def inspect; to_s; end;end
require "algebra/linear-algebra"
require "algebra/matrix-algebra-triplet"
#include Algebra
class TestElementaryDivisor < Runit
M4 = Algebra.SquareMatrix(Rational, 4)
PR = Algebra.Polynomial(Rational, "x")
SPR4 = Algebra.SquareMatrix(PR, 4)
def test_elementary_divisor
m = M4[
[-3, -3, 4, 2],
[5, 1, -4, -6],
[4, -1, -2, -5],
[-5, -3, 4, 4]]
puts
p m.char_polynomial(PR)
mc = m._char_matrix(SPR4)
###################
mct = Algebra::MatrixAlgebraTriplet.new(mc)
###################
mced = mct.e_diagonalize
mced.display;puts
body, left, right = mced
d = Algebra::ElementaryDivisor.factorize(mc.elementary_divisor)
p d
a = (left*mc*right)
a.display; puts
assert_equal(body, a)
x = PR.var
fac = [
Algebra::Factors.new([[1, 1]]),
Algebra::Factors.new([[1, 1]]),
Algebra::Factors.new([[1, 1]]),
Algebra::Factors.new([[x-2, 2], [x+2, 2]])]
assert_equal(d, fac)
end
end
Tests(TestElementaryDivisor)
syntax highlighted by Code2HTML, v. 0.9.1