9 template<
typename _Matrix_Type_>
10 bool pseudoInverse(
const _Matrix_Type_ &a, _Matrix_Type_ &result,
double epsilon = std::numeric_limits<typename _Matrix_Type_::Scalar>::epsilon())
12 Eigen::JacobiSVD< _Matrix_Type_ > svd = a.jacobiSvd(Eigen::ComputeThinU | Eigen::ComputeThinV);
14 typename _Matrix_Type_::Scalar tolerance = epsilon * std::max(a.cols(), a.rows()) *
15 svd.singularValues().array().abs().maxCoeff();
17 result = svd.matrixV() * _Matrix_Type_( (svd.singularValues().array().abs() >
18 tolerance).select(svd.singularValues().array().inverse(), 0) ).asDiagonal() *
19 svd.matrixU().adjoint();
bool pseudoInverse(const _Matrix_Type_ &a, _Matrix_Type_ &result, double epsilon=std::numeric_limits< typename _Matrix_Type_::Scalar >::epsilon())
Moore-Penrose pseudoinverse.
Definition: util.h:10