package mikera.matrixx.algo; import static org.junit.Assert.assertTrue; import mikera.matrixx.Matrix; import mikera.matrixx.decompose.Eigen; import mikera.matrixx.decompose.IEigenResult; import mikera.vectorz.AVector; import mikera.vectorz.Vector; import mikera.vectorz.Vector2; import org.junit.Test; public class TestSymmEigen { @Test(expected = IllegalArgumentException.class) public void unsymmetric() { Matrix A = Matrix.create(new double[][] {{1,2,3}, {2,5,6}, {4,6,9}}); Eigen.decomposeSymmetric(A); } @Test(expected = UnsupportedOperationException.class) public void vectorsNotComputed() { Matrix A = Matrix.create(new double[][] {{1,2,3}, {2,5,6}, {3,6,9}}); IEigenResult result = Eigen.decomposeSymmetric(A, false); result.getEigenVectors(); } @Test public void test1() { Matrix A = Matrix.create(new double[][] {{1,2,3}, {2,5,6}, {3,6,9}}); IEigenResult result = Eigen.decomposeSymmetric(A); Vector2[] eigenValues = new Vector2[3]; eigenValues = result.getEigenvalues(); AVector[] eigenVectors = new AVector[3]; eigenVectors = result.getEigenVectors(); assertTrue(eigenValues[0].epsilonEquals(Vector2.of(14.300735254, 0), 1e-8)); assertTrue(eigenValues[1].epsilonEquals(Vector2.of(0, 0), 1e-8)); assertTrue(eigenValues[2].epsilonEquals(Vector2.of(0.699264746, 0), 1e-8)); assertTrue(eigenVectors[0].epsilonEquals(Vector.of(-0.261496397, -0.562313386, -0.784489190), 1e-8)); assertTrue(eigenVectors[1].epsilonEquals(Vector.of(-0.948683298, 0, 0.316227766), 1e-8)); assertTrue(eigenVectors[2].epsilonEquals(Vector.of(-0.177819106, 0.826924214, -0.533457318), 1e-8)); } }