01: package JSci.tests;
02:
03: import JSci.maths.*;
04: import JSci.maths.matrices.*;
05: import JSci.maths.vectors.AbstractComplexVector;
06: import JSci.maths.vectors.ComplexVector;
07: import JSci.util.MatrixToolkit;
08:
09: /**
10: * Testcase for complex eigenvalue/vector methods.
11: * @author Mark Hale
12: */
13: public class ComplexMatrixEigenTest extends junit.framework.TestCase {
14: private final int N = 5;
15: private AbstractComplexSquareMatrix sqmat;
16: private double eval[];
17: private AbstractComplexVector evec[];
18:
19: public static void main(String arg[]) {
20: junit.textui.TestRunner.run(ComplexMatrixEigenTest.class);
21: }
22:
23: public ComplexMatrixEigenTest(String name) {
24: super (name);
25: }
26:
27: protected void setUp() {
28: JSci.GlobalSettings.ZERO_TOL = 1.0e-6;
29: sqmat = MatrixToolkit.randomComplexSquareMatrix(N);
30: sqmat = (AbstractComplexSquareMatrix) sqmat.add(sqmat
31: .hermitianAdjoint()); // make hermitian
32: eval = new double[N];
33: evec = new ComplexVector[N];
34: try {
35: eval = LinearMath.eigenSolveHermitian(sqmat, evec);
36: } catch (MaximumIterationsExceededException e) {
37: fail(e.toString());
38: }
39: }
40:
41: public void testEigenvectors() {
42: for (int i = 0; i < N; i++)
43: assertEquals(sqmat.multiply(evec[i]), evec[i]
44: .scalarMultiply(eval[i]));
45: }
46:
47: public void testTrace() {
48: double tr = 0.0;
49: for (int i = 0; i < N; i++)
50: tr += eval[i];
51: assertEquals(sqmat.trace(), new Complex(tr, 0.0));
52: }
53:
54: public void testDet() {
55: double det = 1.0;
56: for (int i = 0; i < N; i++)
57: det *= eval[i];
58: assertEquals(sqmat.det(), new Complex(det, 0.0));
59: }
60: }
|