@Test public void testRecoverOrginal() { final MatrixAlgebra algebra = getAlgebra(); final DecompositionResult result = getSVD().apply(A); assertTrue(result instanceof SVDecompositionResult); final SVDecompositionResult svd_result = (SVDecompositionResult) result; final DoubleMatrix u = svd_result.getU(); final DoubleMatrix w = DoubleMatrix.diagonal(DoubleArray.copyOf(svd_result.getSingularValues())); final DoubleMatrix vt = svd_result.getVT(); final DoubleMatrix a = (DoubleMatrix) algebra.multiply(algebra.multiply(u, w), vt); checkEquals(A, a); }
@Test public void testInvert() { final MatrixAlgebra algebra = getAlgebra(); final SVDecompositionResult result = getSVD().apply(A); final DoubleMatrix ut = result.getUT(); final DoubleMatrix v = result.getV(); final double[] sv = result.getSingularValues(); final int n = sv.length; final double[] svinv = new double[n]; for (int i = 0; i < n; i++) { if (sv[i] == 0.0) { svinv[i] = 0.0; } else { svinv[i] = 1.0 / sv[i]; } } final DoubleMatrix winv = DoubleMatrix.diagonal(DoubleArray.copyOf(svinv)); final DoubleMatrix ainv = (DoubleMatrix) algebra.multiply(algebra.multiply(v, winv), ut); final DoubleMatrix identity = (DoubleMatrix) algebra.multiply(A, ainv); checkIdentity(identity); }
double[] w = svdRes.getSingularValues(); DoubleMatrix u = svdRes.getU(); DoubleMatrix v = svdRes.getV();