#include "SparseSolverEigenLLT.h" #include std::vector SparseSolverEigenLLT::solve_Ax_b(SparseMatrix A, SparseVector b, int numel, std::vector & uidx, const std::vector * labels, const std::vector * seeds, int active_label) { SimplicialLLT > solver; // Convert to dense format for solver compatibility - this might become a memory issue VectorXd b_dense = b; // LLT Decomposition solver.compute(A); /*if(solver.info()!=true) { std::cout << "Decomposition failed!\n"; }*/ // Solve system with decomposition VectorXd x_dense = solver.solve(b_dense); /*if(solver.info()!=true) { std::cout << "Solver failed!\n"; }*/ // solve for another right hand side - good feature for multi-label setup //x1 = solver.solve(b1); // Holder for saving to external format std::vector xmat(numel); for (int i=0; isize(); i++) { if((*labels)[i] == active_label) xmat[(*seeds)[i]] = 1.0; else xmat[(*seeds)[i]] = 0.0; } return xmat; }