6Eigen::MatrixXd
pseudoInverse(
const Eigen::MatrixXd& a,
double epsilon = std::numeric_limits<double>::epsilon())
8 Eigen::JacobiSVD< Eigen::MatrixXd > svd(a, Eigen::ComputeThinU | Eigen::ComputeThinV);
9 double tolerance = epsilon * std::max(a.cols(), a.rows()) * svd.singularValues().array().abs()(0);
10 return svd.matrixV() * (svd.singularValues().array().abs() > tolerance).select(svd.singularValues().array().inverse(), 0).matrix().asDiagonal() * svd.matrixU().adjoint();
16 int lenght = w.size();
18 Eigen::DiagonalMatrix<double, Eigen::Dynamic> Winv(lenght);
19 Winv = w.asDiagonal().inverse();
21 Eigen::MatrixXd tmp(lenght, lenght);
26 return Winv * a.transpose() * tmp;