package edu.stanford.rsl.conrad.numerics.test; import static edu.stanford.rsl.conrad.numerics.SimpleMatrix.InversionType; import static org.junit.Assert.*; //import org.junit.After; //import org.junit.AfterClass; //import org.junit.Before; //import org.junit.BeforeClass; import org.junit.Test; import edu.stanford.rsl.conrad.geometry.General; import edu.stanford.rsl.conrad.numerics.SimpleMatrix; import edu.stanford.rsl.conrad.numerics.SimpleOperators; import edu.stanford.rsl.conrad.numerics.SimpleVector; import edu.stanford.rsl.conrad.utils.TestingTools; public class SimpleOperatorsTest { // @BeforeClass // public static void setUpBeforeClass() throws Exception { // } // // @AfterClass // public static void tearDownAfterClass() throws Exception { // } // // @Before // public void setUp() throws Exception { // } // // @After // public void tearDown() throws Exception { // } @Test public void testInverseQR() { // create a random matrix final int N = TestingTools.rand(1, 8); SimpleMatrix M = new SimpleMatrix(N, N); M.randomize(-5.0, 5.0); // test inversion SimpleMatrix Minv = M.inverse(InversionType.INVERT_QR); SimpleMatrix I1 = SimpleOperators.multiplyMatrixProd(M, Minv); SimpleMatrix I2 = SimpleOperators.multiplyMatrixProd(Minv, M); assertTrue(I1.isIdentity(TestingTools.DELTA)); assertTrue(I2.isIdentity(TestingTools.DELTA)); } @Test public void testInverseUpperTriangular() { // create a random upper triangular matrix final int N = TestingTools.rand(1, 8); SimpleMatrix M = new SimpleMatrix(N, N); M.randomize(-5.0, 5.0); for (int row = 1; row < N; ++row) for (int col = 0; col < row; ++col) M.setElementValue(row, col, 0.0); // test inversion SimpleMatrix Minv = M.inverse(InversionType.INVERT_UPPER_TRIANGULAR); SimpleMatrix I1 = SimpleOperators.multiplyMatrixProd(M, Minv); SimpleMatrix I2 = SimpleOperators.multiplyMatrixProd(Minv, M); assertTrue(I1.isIdentity(TestingTools.DELTA)); assertTrue(I2.isIdentity(TestingTools.DELTA)); } @Test public void testInverseRt2D() { SimpleMatrix R = TestingTools.randRotationMatrix2D(); SimpleVector t = new SimpleVector(2); t.randomize(-10.0, 10.0); SimpleMatrix Rt = General.createHomAffineMotionMatrix(R, t); SimpleMatrix Rtinv = Rt.inverse(InversionType.INVERT_RT); SimpleMatrix I1 = SimpleOperators.multiplyMatrixProd(Rt, Rtinv); SimpleMatrix I2 = SimpleOperators.multiplyMatrixProd(Rtinv, Rt); assertTrue(I1.isIdentity(TestingTools.DELTA)); assertTrue(I2.isIdentity(TestingTools.DELTA)); } @Test public void testInverseRt3D() { SimpleMatrix R = TestingTools.randRotationMatrix3D(); SimpleVector t = new SimpleVector(3); t.randomize(-10.0, 10.0); SimpleMatrix Rt = General.createHomAffineMotionMatrix(R, t); SimpleMatrix Rtinv = Rt.inverse(InversionType.INVERT_RT); SimpleMatrix I1 = SimpleOperators.multiplyMatrixProd(Rt, Rtinv); SimpleMatrix I2 = SimpleOperators.multiplyMatrixProd(Rtinv, Rt); assertTrue(I1.isIdentity(TestingTools.DELTA)); assertTrue(I2.isIdentity(TestingTools.DELTA)); } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */