16 inline void pseudoInverse(
const Eigen::MatrixXd& M_, Eigen::MatrixXd& M_pinv_,
bool damped =
true) {
17 double lambda_ = damped ? 0.2 : 0.0;
19 Eigen::JacobiSVD<Eigen::MatrixXd> svd(M_, Eigen::ComputeFullU | Eigen::ComputeFullV);
20 Eigen::JacobiSVD<Eigen::MatrixXd>::SingularValuesType sing_vals_ = svd.singularValues();
21 Eigen::MatrixXd S_ = M_;
24 for (
int i = 0; i < sing_vals_.size(); i++)
25 S_(i, i) = (sing_vals_(i)) / (sing_vals_(i) * sing_vals_(i) + lambda_ * lambda_);
27 M_pinv_ = Eigen::MatrixXd(svd.matrixV() * S_.transpose() * svd.matrixU().transpose());
void pseudoInverse(const Eigen::MatrixXd &M_, Eigen::MatrixXd &M_pinv_, bool damped=true)