You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2008/12/02 15:35:00 UTC
svn commit: r722471 -
/commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java
Author: luc
Date: Tue Dec 2 06:35:00 2008
New Revision: 722471
URL: http://svn.apache.org/viewvc?rev=722471&view=rev
Log:
improved test coverage
Modified:
commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java
Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java?rev=722471&r1=722470&r2=722471&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/linear/EigenDecompositionImplTest.java Tue Dec 2 06:35:00 2008
@@ -87,6 +87,23 @@
assertEquals(0.1, ed.getEigenvalue(3), 1.0e-15);
}
+ public void testAbsoluteSplit() {
+ RealMatrix matrix =
+ new RealMatrixImpl(new double[][] {
+ { 0.784, -0.288, 0.000, 0.000 },
+ { Double.NaN, 0.616, 0.000, 0.000 },
+ { Double.NaN, Double.NaN, 0.164, -0.048 },
+ { Double.NaN, Double.NaN, Double.NaN, 0.136 }
+ }, false);
+ EigenDecompositionImpl ed = new EigenDecompositionImpl();
+ ed.setAbsoluteSplitTolerance(1.0e-13);
+ ed.decompose(matrix);
+ assertEquals(1.0, ed.getEigenvalue(0), 1.0e-15);
+ assertEquals(0.4, ed.getEigenvalue(1), 1.0e-15);
+ assertEquals(0.2, ed.getEigenvalue(2), 1.0e-15);
+ assertEquals(0.1, ed.getEigenvalue(3), 1.0e-15);
+ }
+
public void testDimension4WithoutSplit() {
RealMatrix matrix =
new RealMatrixImpl(new double[][] {
@@ -169,6 +186,46 @@
assertEquals(0, vTv.subtract(id).getNorm(), 2.0e-13);
}
+ /** test non invertible matrix */
+ public void testNonInvertible() {
+ Random r = new Random(9994100315209l);
+ EigenDecomposition ed =
+ new EigenDecompositionImpl(createTestMatrix(r, new double[] { 1.0, 0.0, -1.0, -2.0, -3.0 }));
+ assertFalse(ed.isNonSingular());
+ try {
+ ed.getInverse();
+ fail("an exception should have been thrown");
+ } catch (InvalidMatrixException ime) {
+ // expected behavior
+ } catch (Exception e) {
+ fail("wrong exception caught");
+ }
+ }
+
+ /** test invertible matrix */
+ public void testInvertible() {
+ Random r = new Random(9994100315209l);
+ RealMatrix m =
+ createTestMatrix(r, new double[] { 1.0, 0.5, -1.0, -2.0, -3.0 });
+ EigenDecomposition ed = new EigenDecompositionImpl(m);
+ assertTrue(ed.isNonSingular());
+ RealMatrix inverse = ed.getInverse();
+ RealMatrix error =
+ m.multiply(inverse).subtract(MatrixUtils.createRealIdentityMatrix(m.getRowDimension()));
+ assertEquals(0, error.getNorm(), 4.0e-15);
+ }
+
+ /** test diagonal matrix */
+ public void testDiagonal() {
+ double[] diagonal = new double[] { -3.0, -2.0, 2.0, 5.0 };
+ EigenDecomposition ed =
+ new EigenDecompositionImpl(createDiagonalMatrix(diagonal, diagonal.length, diagonal.length));
+ assertEquals(diagonal[0], ed.getEigenvalue(3), 2.0e-15);
+ assertEquals(diagonal[1], ed.getEigenvalue(2), 2.0e-15);
+ assertEquals(diagonal[2], ed.getEigenvalue(1), 2.0e-15);
+ assertEquals(diagonal[3], ed.getEigenvalue(0), 2.0e-15);
+ }
+
/** test solve dimension errors */
public void testSolveDimensionErrors() {
EigenDecomposition ed = new EigenDecompositionImpl(matrix);