package edu.stanford.rsl.conrad.numerics.test;
import org.junit.Test;
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.numerics.Solvers;
import edu.stanford.rsl.conrad.utils.TestingTools;
//import org.junit.After;
//import org.junit.AfterClass;
//import org.junit.Before;
//import org.junit.BeforeClass;
public class SolversTest {
// @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 testSolveUpperTriangular() {
int n = TestingTools.rand(1, 15);
SimpleMatrix U = TestingTools.randUpperTriangularMatrix(n, n);
SimpleVector b = new SimpleVector(n);
b.randomize(-1.0, 1.0);
SimpleVector x = Solvers.solveUpperTriangular(U, b);
SimpleVector Ax = SimpleOperators.multiply(U, x);
TestingTools.assertEqualElementWise(Ax, b, TestingTools.DELTA);
}
@Test
public void testSolveLowerTriangular() {
int n = TestingTools.rand(1, 15);
SimpleMatrix L = TestingTools.randLowerTriangularMatrix(n, n);
SimpleVector b = new SimpleVector(n);
b.randomize(-1.0, 1.0);
SimpleVector x = Solvers.solveLowerTriangular(L, b);
SimpleVector Ax = SimpleOperators.multiply(L, x);
TestingTools.assertEqualElementWise(Ax, b, TestingTools.DELTA);
}
@Test
public void testSolveLSE() {
int n = TestingTools.rand(2, 10);
SimpleMatrix A = TestingTools.randMatrixNonSingular(n);
SimpleVector b = TestingTools.randVector(n);
SimpleVector x = Solvers.solveLinearSysytemOfEquations(A, b);
SimpleVector Ax = SimpleOperators.multiply(A, x);
TestingTools.assertEqualElementWise(Ax, b, TestingTools.DELTA);
}
@Test
public void testSolveLinearLeastSquares() {
int m = TestingTools.rand(2, 15);
int n = TestingTools.rand(2, m-1);
SimpleMatrix A = TestingTools.randMatrix(m, n);
SimpleVector b = TestingTools.randVector(m);
SimpleVector x = Solvers.solveLinearLeastSquares(A, b);
SimpleVector AtAx = SimpleOperators.multiply(A.transposed(), SimpleOperators.multiply(A, x));
SimpleVector Atb = SimpleOperators.multiply(A.transposed(), b);
TestingTools.assertEqualElementWise(AtAx, Atb, TestingTools.DELTA);
}
}
/*
* Copyright (C) 2010-2014 Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/