@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); }