6 Eigen::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;