Согласно эта страница , ex15
не является полным рангом. Вы должны проверить, что каждый шаг прошел хорошо:
SimplicialLDLT<Eigen::SparseMatrix<double> > chol(mat);
if(chol.info()!=Eigen::Success)
return;
VectorXd x = chol.solve(b);
if(chol.info()!=Eigen::Success)
return;
и затем проверьте, что у вас есть одно решение (если оно не является полным рангом и существует хотя бы одно решение, то существует целое подпространство решений):
cout << (mat*x-b).norm()/b.norm() << "\n";