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 2009/11/28 00:24:13 UTC
svn commit: r885048 -
/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java
Author: luc
Date: Fri Nov 27 23:24:12 2009
New Revision: 885048
URL: http://svn.apache.org/viewvc?rev=885048&view=rev
Log:
added a test with a singular matrix
updated class to Junit4
Modified:
commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java?rev=885048&r1=885047&r2=885048&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/BiDiagonalTransformerTest.java Fri Nov 27 23:24:12 2009
@@ -20,12 +20,10 @@
import org.apache.commons.math.linear.BiDiagonalTransformer;
import org.apache.commons.math.linear.MatrixUtils;
import org.apache.commons.math.linear.RealMatrix;
+import org.junit.Assert;
+import org.junit.Test;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class BiDiagonalTransformerTest extends TestCase {
+public class BiDiagonalTransformerTest {
private double[][] testSquare = {
{ 24.0 / 25.0, 43.0 / 25.0 },
@@ -39,10 +37,7 @@
{ -360.0 / 625.0, 192.0 / 625.0, 1756.0 / 625.0 },
};
- public BiDiagonalTransformerTest(String name) {
- super(name);
- }
-
+ @Test
public void testDimensions() {
checkdimensions(MatrixUtils.createRealMatrix(testSquare));
checkdimensions(MatrixUtils.createRealMatrix(testNonSquare));
@@ -53,15 +48,16 @@
final int m = matrix.getRowDimension();
final int n = matrix.getColumnDimension();
BiDiagonalTransformer transformer = new BiDiagonalTransformer(matrix);
- assertEquals(m, transformer.getU().getRowDimension());
- assertEquals(m, transformer.getU().getColumnDimension());
- assertEquals(m, transformer.getB().getRowDimension());
- assertEquals(n, transformer.getB().getColumnDimension());
- assertEquals(n, transformer.getV().getRowDimension());
- assertEquals(n, transformer.getV().getColumnDimension());
+ Assert.assertEquals(m, transformer.getU().getRowDimension());
+ Assert.assertEquals(m, transformer.getU().getColumnDimension());
+ Assert.assertEquals(m, transformer.getB().getRowDimension());
+ Assert.assertEquals(n, transformer.getB().getColumnDimension());
+ Assert.assertEquals(n, transformer.getV().getRowDimension());
+ Assert.assertEquals(n, transformer.getV().getColumnDimension());
}
+ @Test
public void testAEqualUSVt() {
checkAEqualUSVt(MatrixUtils.createRealMatrix(testSquare));
checkAEqualUSVt(MatrixUtils.createRealMatrix(testNonSquare));
@@ -74,15 +70,17 @@
RealMatrix b = transformer.getB();
RealMatrix v = transformer.getV();
double norm = u.multiply(b).multiply(v.transpose()).subtract(matrix).getNorm();
- assertEquals(0, norm, 1.0e-14);
+ Assert.assertEquals(0, norm, 1.0e-14);
}
+ @Test
public void testUOrthogonal() {
checkOrthogonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare)).getU());
checkOrthogonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare)).getU());
checkOrthogonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare).transpose()).getU());
}
+ @Test
public void testVOrthogonal() {
checkOrthogonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare)).getV());
checkOrthogonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare)).getV());
@@ -92,9 +90,10 @@
private void checkOrthogonal(RealMatrix m) {
RealMatrix mTm = m.transpose().multiply(m);
RealMatrix id = MatrixUtils.createRealIdentityMatrix(mTm.getRowDimension());
- assertEquals(0, mTm.subtract(id).getNorm(), 1.0e-14);
+ Assert.assertEquals(0, mTm.subtract(id).getNorm(), 1.0e-14);
}
+ @Test
public void testBBiDiagonal() {
checkBiDiagonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare)).getB());
checkBiDiagonal(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare)).getB());
@@ -108,17 +107,61 @@
for (int j = 0; j < cols; ++j) {
if (rows < cols) {
if ((i < j) || (i > j + 1)) {
- assertEquals(0, m.getEntry(i, j), 1.0e-16);
+ Assert.assertEquals(0, m.getEntry(i, j), 1.0e-16);
}
} else {
if ((i < j - 1) || (i > j)) {
- assertEquals(0, m.getEntry(i, j), 1.0e-16);
+ Assert.assertEquals(0, m.getEntry(i, j), 1.0e-16);
}
}
}
}
}
+ @Test
+ public void testSingularMatrix() {
+ BiDiagonalTransformer transformer =
+ new BiDiagonalTransformer(MatrixUtils.createRealMatrix(new double[][] {
+ { 1.0, 2.0, 3.0 },
+ { 2.0, 3.0, 4.0 },
+ { 3.0, 5.0, 7.0 }
+ }));
+ final double s3 = Math.sqrt(3.0);
+ final double s14 = Math.sqrt(14.0);
+ final double s42 = Math.sqrt(42.0);
+ final double s1553 = Math.sqrt(1553.0);
+ RealMatrix uRef = MatrixUtils.createRealMatrix(new double[][] {
+ { -1.0 / s14, 5.0 / s42, 1.0 / s3 },
+ { -2.0 / s14, -4.0 / s42, 1.0 / s3 },
+ { -3.0 / s14, 1.0 / s42, -1.0 / s3 }
+ });
+ RealMatrix bRef = MatrixUtils.createRealMatrix(new double[][] {
+ { -s14, s1553 / s14, 0.0 },
+ { 0.0, -87 * s3 / (s14 * s1553), -s3 * s14 / s1553 },
+ { 0.0, 0.0, 0.0 }
+ });
+ RealMatrix vRef = MatrixUtils.createRealMatrix(new double[][] {
+ { 1.0, 0.0, 0.0 },
+ { 0.0, -23 / s1553, 32 / s1553 },
+ { 0.0, -32 / s1553, -23 / s1553 }
+ });
+
+ // check values against known references
+ RealMatrix u = transformer.getU();
+ Assert.assertEquals(0, u.subtract(uRef).getNorm(), 1.0e-14);
+ RealMatrix b = transformer.getB();
+ Assert.assertEquals(0, b.subtract(bRef).getNorm(), 1.0e-14);
+ RealMatrix v = transformer.getV();
+ Assert.assertEquals(0, v.subtract(vRef).getNorm(), 1.0e-14);
+
+ // check the same cached instance is returned the second time
+ Assert.assertTrue(u == transformer.getU());
+ Assert.assertTrue(b == transformer.getB());
+ Assert.assertTrue(v == transformer.getV());
+
+ }
+
+ @Test
public void testMatricesValues() {
BiDiagonalTransformer transformer =
new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare));
@@ -138,27 +181,24 @@
// check values against known references
RealMatrix u = transformer.getU();
- assertEquals(0, u.subtract(uRef).getNorm(), 1.0e-14);
+ Assert.assertEquals(0, u.subtract(uRef).getNorm(), 1.0e-14);
RealMatrix b = transformer.getB();
- assertEquals(0, b.subtract(bRef).getNorm(), 1.0e-14);
+ Assert.assertEquals(0, b.subtract(bRef).getNorm(), 1.0e-14);
RealMatrix v = transformer.getV();
- assertEquals(0, v.subtract(vRef).getNorm(), 1.0e-14);
+ Assert.assertEquals(0, v.subtract(vRef).getNorm(), 1.0e-14);
// check the same cached instance is returned the second time
- assertTrue(u == transformer.getU());
- assertTrue(b == transformer.getB());
- assertTrue(v == transformer.getV());
+ Assert.assertTrue(u == transformer.getU());
+ Assert.assertTrue(b == transformer.getB());
+ Assert.assertTrue(v == transformer.getV());
}
+ @Test
public void testUpperOrLower() {
- assertTrue(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare)).isUpperBiDiagonal());
- assertTrue(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare)).isUpperBiDiagonal());
- assertFalse(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare).transpose()).isUpperBiDiagonal());
- }
-
- public static Test suite() {
- return new TestSuite(BiDiagonalTransformerTest.class);
+ Assert.assertTrue(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testSquare)).isUpperBiDiagonal());
+ Assert.assertTrue(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare)).isUpperBiDiagonal());
+ Assert.assertFalse(new BiDiagonalTransformer(MatrixUtils.createRealMatrix(testNonSquare).transpose()).isUpperBiDiagonal());
}
}