//@Override public void solve(DMatrixRMaj B, DMatrixRMaj X) { DMatrixSparseCSC L = cholesky.getL(); int N = L.numRows; double[] b = TriangularSolver_DSCC.adjust(gb, N); double[] x = TriangularSolver_DSCC.adjust(gx, N); int[] Pinv = reduce.getArrayPinv(); for (int col = 0; col < B.numCols; col++) { int index = col; for (int i = 0; i < N; i++, index += B.numCols) { b[i] = B.data[index]; } if (Pinv != null) { CommonOps_DSCC.permuteInv(Pinv, b, x, N); TriangularSolver_DSCC.solveL(L, x); TriangularSolver_DSCC.solveTranL(L, x); CommonOps_DSCC.permute(Pinv, x, b, N); } else { TriangularSolver_DSCC.solveL(L, b); TriangularSolver_DSCC.solveTranL(L, b); } index = col; for (int i = 0; i < N; i++, index += X.numCols) { X.data[index] = b[i]; } } }