#!/usr/bin/perl -w
BEGIN { plan
tests
=> 12};
my
$A
= Math::Matrix -> new([[
rand
,
rand
,
rand
],
[
rand
,
rand
,
rand
],
[
rand
,
rand
,
rand
]]);
my
$B
=
$A
->multiply_scalar(-2);
ok(
$B
);
my
$C
=
$A
->add(
$B
)->multiply_scalar(-1);
ok(
$C
->equal(
$A
));
my
$l
=
$A
->slice(0);
my
$R
=
$A
->slice(1,2);
my
$D
=
$l
->concat(
$R
);
ok(
$D
->equal(
$A
));
my
$v
= Math::Matrix -> new([[
rand
,
rand
,
rand
]]);
my
$M
=
$A
->concat(
$v
->transpose);
my
$x
=
$M
->solve;
my
$d
=
$A
->determinant;
my
$F
=
$v
->transpose->concat(
$R
);
my
$e
=
$F
->determinant;
ok(
abs
(
$e
/
$d
-
$x
->[0][0]) < 0.000001);
ok(
abs
(
$A
->transpose->slice(0)->dot_product(
$x
)-
$v
->[0][0]) < 0.000001);
ok(
$x
->absolute);
ok(
abs
(
$x
->normalize->absolute-1) < 0.000001);
my
$t
=
$R
->transpose->cross_product();
ok(
$t
);
my
$o
=
$t
->multiply(
$R
);
ok(
$o
->absolute < 0.000001);
my
$E
= Math::Matrix->new_identity(3);
my
$G
=
$A
->multiply(
$E
);
ok(
$A
->equal(
$G
));
my
$Ai
=
$A
->invert;
my
$P
=
$A
->multiply(
$Ai
);
ok(
$P
->equal(
$E
));
my
$Z
= Math::Matrix -> new([[0,0,0],
[0,0,0],
[0,0,0]]);
my
$Q
=
$Z
->subtract(
$P
);
my
$J
=-
$Q
;
ok(
$J
->equal(
$P
));