public SequentialBigSvd(Matrix A, int p) { // Y = A * \Omega y = A.times(new RandomTrinaryMatrix(A.columnSize(), p)); // R'R = Y' Y cd1 = new CholeskyDecomposition(y.transpose().times(y)); // B = Q" A = (Y R^{-1} )' A b = cd1.solveRight(y).transpose().times(A); // L L' = B B' cd2 = new CholeskyDecomposition(b.times(b.transpose())); // U_0 D V_0' = L svd = new SingularValueDecomposition(cd2.getL()); }
@Test public void test2() { // Test matrix from Nicholas Higham's paper at http://eprints.ma.man.ac.uk/1199/01/covered/MIMS_ep2008_116.pdf double[][] values = new double[3][]; values[0] = new double[]{1, -1, 1}; values[1] = new double[]{-1, 1, -1}; values[2] = new double[]{1, -1, 2}; Matrix A = new DenseMatrix(values); // without pivoting CholeskyDecomposition cd = new CholeskyDecomposition(A, false); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); // with pivoting cd = new CholeskyDecomposition(A); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); }
@Test public void testRankDeficient() { Matrix A = rank4Matrix(); CholeskyDecomposition cd = new CholeskyDecomposition(A); PivotedMatrix Ax = new PivotedMatrix(A, cd.getPivot()); CholeskyDecomposition cd2 = new CholeskyDecomposition(Ax, false); assertEquals(0, cd2.getL().times(cd2.getL().transpose()).minus(Ax).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); Assert.assertFalse(cd.isPositiveDefinite()); Matrix L = cd.getL(); Matrix Abar = L.times(L.transpose()); double error = A.minus(Abar).aggregate(Functions.MAX, Functions.ABS); Assert.assertEquals(0, error, 1.0e-10); }
@Test public void rank1() { Matrix x = new DenseMatrix(3, 3); x.viewRow(0).assign(new double[]{1, 2, 3}); x.viewRow(1).assign(new double[]{2, 4, 6}); x.viewRow(2).assign(new double[]{3, 6, 9}); CholeskyDecomposition rr = new CholeskyDecomposition(x.transpose().times(x), false); assertEquals(0, new DenseVector(new double[]{3.741657, 7.483315, 11.22497}).aggregate(rr.getL().transpose().viewRow(0), Functions.PLUS, new DoubleDoubleFunction() { @Override public double apply(double arg1, double arg2) { return Math.abs(arg1) - Math.abs(arg2); } }), 1.0e-5); assertEquals(0, rr.getL().viewPart(0, 3, 1, 2).aggregate(Functions.PLUS, Functions.ABS), 1.0e-9); }
CholeskyDecomposition cd = new CholeskyDecomposition(A, type); Matrix L = cd.getL();
public SequentialBigSvd(Matrix A, int p) { // Y = A * \Omega y = A.times(new RandomTrinaryMatrix(A.columnSize(), p)); // R'R = Y' Y cd1 = new CholeskyDecomposition(y.transpose().times(y)); // B = Q" A = (Y R^{-1} )' A b = cd1.solveRight(y).transpose().times(A); // L L' = B B' cd2 = new CholeskyDecomposition(b.times(b.transpose())); // U_0 D V_0' = L svd = new SingularValueDecomposition(cd2.getL()); }
public SequentialBigSvd(Matrix A, int p) { // Y = A * \Omega y = A.times(new RandomTrinaryMatrix(A.columnSize(), p)); // R'R = Y' Y cd1 = new CholeskyDecomposition(y.transpose().times(y)); // B = Q" A = (Y R^{-1} )' A b = cd1.solveRight(y).transpose().times(A); // L L' = B B' cd2 = new CholeskyDecomposition(b.times(b.transpose())); // U_0 D V_0' = L svd = new SingularValueDecomposition(cd2.getL()); }
r2 = new CholeskyDecomposition(y2); l2 = new CholeskyDecomposition(b2); svd = new SingularValueDecomposition(l2.getL());
r2 = new CholeskyDecomposition(y2); l2 = new CholeskyDecomposition(b2); svd = new SingularValueDecomposition(l2.getL());
r2 = new CholeskyDecomposition(y2); l2 = new CholeskyDecomposition(b2); svd = new SingularValueDecomposition(l2.getL());
@Test public void test2() { // Test matrix from Nicholas Higham's paper at http://eprints.ma.man.ac.uk/1199/01/covered/MIMS_ep2008_116.pdf double[][] values = new double[3][]; values[0] = new double[]{1, -1, 1}; values[1] = new double[]{-1, 1, -1}; values[2] = new double[]{1, -1, 2}; Matrix A = new DenseMatrix(values); // without pivoting CholeskyDecomposition cd = new CholeskyDecomposition(A, false); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); // with pivoting cd = new CholeskyDecomposition(A); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); }
@Test public void testRankDeficient() { Matrix A = rank4Matrix(); CholeskyDecomposition cd = new CholeskyDecomposition(A); PivotedMatrix Ax = new PivotedMatrix(A, cd.getPivot()); CholeskyDecomposition cd2 = new CholeskyDecomposition(Ax, false); assertEquals(0, cd2.getL().times(cd2.getL().transpose()).minus(Ax).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); assertEquals(0, cd.getL().times(cd.getL().transpose()).minus(A).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); Assert.assertFalse(cd.isPositiveDefinite()); Matrix L = cd.getL(); Matrix Abar = L.times(L.transpose()); double error = A.minus(Abar).aggregate(Functions.MAX, Functions.ABS); Assert.assertEquals(0, error, 1.0e-10); }
@Test public void rank1() { Matrix x = new DenseMatrix(3, 3); x.viewRow(0).assign(new double[]{1, 2, 3}); x.viewRow(1).assign(new double[]{2, 4, 6}); x.viewRow(2).assign(new double[]{3, 6, 9}); CholeskyDecomposition rr = new CholeskyDecomposition(x.transpose().times(x), false); assertEquals(0, new DenseVector(new double[]{3.741657, 7.483315, 11.22497}).aggregate(rr.getL().transpose().viewRow(0), Functions.PLUS, new DoubleDoubleFunction() { @Override public double apply(double arg1, double arg2) { return Math.abs(arg1) - Math.abs(arg2); } }), 1.0e-5); assertEquals(0, rr.getL().viewPart(0, 3, 1, 2).aggregate(Functions.PLUS, Functions.ABS), 1.0e-9); }
CholeskyDecomposition cd = new CholeskyDecomposition(A, type); Matrix L = cd.getL();