23 typedef typename MatrixLike::Scalar Scalar;
24 typedef typename MatrixLike::RealScalar RealScalar;
26 static MatrixLike run(
const Eigen::MatrixBase<MatrixLike>& a,
27 const RealScalar& epsilon) {
29 Eigen::JacobiSVD<MatrixLike> svd(a,
30 Eigen::ComputeThinU | Eigen::ComputeThinV);
31 RealScalar tolerance = epsilon *
32 static_cast<Scalar
>(max(a.cols(), a.rows())) *
33 svd.singularValues().array().abs()(0);
34 return svd.matrixV() *
35 (svd.singularValues().array().abs() > tolerance)
36 .select(svd.singularValues().array().inverse(), 0)
39 svd.matrixU().adjoint();
45 typedef typename MatrixLike::Scalar Scalar;
46 typedef typename MatrixLike::RealScalar RealScalar;
48 static MatrixLike run(
const Eigen::MatrixBase<MatrixLike>& a,
50 return Eigen::MatrixBase<MatrixLike>::Zero(a.rows(), a.cols());