#################################################
# #
# This is test script for 'matrix-algebra.rb' #
# #
#################################################
require "algebra"
require "rubyunit"
#require "algebra/matrix-algebra.rb"
#include Algebra
M33 = Algebra.MatrixAlgebra(Integer, 3, 3)
M34 = Algebra.MatrixAlgebra(Integer, 3, 4)
m0 = M33[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]
m1 = M33[
[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]
m2 = M34[[20, 21, 22, 23],
[24, 25, 26, 27],
[28, 29, 30, 31]]
p m0 + m1
p m0 * m0
p( (m0 * m0).t )
m = m0 * m2
M43 = M34.transpose
p M34.sizes
p M43.sizes
M44 = M43 * M34
p m2.t * m2
require "algebra/polynomial"
Px = Algebra.Polynomial(Integer, "x")
M2 = Algebra.SquareMatrix(Rational, 2)
#M2 = SquareMatrix(Integer, 2)
m2 = M2[
[1, 2],
[3, 4],
]
p f = m2.char_polynomial(Px)
M3 = Algebra.SquareMatrix(Rational, 3)
m3 = M3[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
p f = m3.char_polynomial(Px)
class TestMatrixAlgebra < Runit
def test_basic
m = M2[[0, 1], [2, 3]]
assert_equal(m[1, 1], 3)
m[1, 1] = 4
assert_equal(m[1, 1], 4)
end
def test_rank
assert_equal(M3[[0, 0, 0], [0, 0, 0], [0, 0, 0]].rank, 0)
assert_equal(M3[[1, 2, 3], [-2, -4, -6], [-1, -2, -3]].rank, 1)
assert_equal(M3[[1, 2, 3], [-2, -4, -5], [-1, -2, -2]].rank, 2)
assert_equal(M3[[1, 2, 3], [-2, -4, -5], [-1, 0, -3]].rank, 3)
end
def test_inverse
m = M3[
[0, 1, 3],
[1, 0, 1],
[0, 1, 2]
]
assert_equal(m * m.inverse, 1)
assert_equal(m.inverse * m, 1)
end
def test_cofactor_matirx
m = M3[
[0, 1, 3],
[1, 0, 1],
[0, 1, 2]
]
assert_equal(m.cofactor_matrix * m, m.unity * m.determinant)
end
R = Polynomial(Rational, "x")
MR = SquareMatrix(R, 2)
MQ = SquareMatrix(Rational, 2)
MZ = SquareMatrix(Rational, 2)
Z3 = ResidueClassRing(Integer, 3)
MZ3 = SquareMatrix(Z3, 2)
# class R0 < MatrixAlgebra
# end
# ME = SquareMatrix(R0, 2)
def test_conversion
x = R.var
mR = MR[[x,2*x],[3*x,4*x]]
mQ = MQ[[1,2],[3,4]]
# mE = ME.new [[1,2],[3,4]]
mZ = MZ[[1,2],[3,4]]
mZ3 = MZ3[[1,2],[3,4]]
assert_equal(MR, (mR*mQ).class)
assert_equal(MR, (mQ*mR).class)
# assert_raises(RuntimeError) {mR * mE}
assert_equal(MQ, (mZ*mQ).class)
assert_equal(MQ, (mQ*mZ).class)
assert_equal(MZ3, (mZ3*mZ).class)
assert_equal(MZ3, (mZ*mZ3).class)
assert_equal(Z3, Z3.wedge(Rational))
assert_equal(MZ3, (mZ3*mQ).class)
assert_equal(Z3, Rational.wedge(Z3))
assert_equal(MZ3, (mQ*mZ3).class)
end
end
Tests(TestMatrixAlgebra)
syntax highlighted by Code2HTML, v. 0.9.1