本文整理汇总了C++中eigen::Vector2d::rows方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector2d::rows方法的具体用法?C++ Vector2d::rows怎么用?C++ Vector2d::rows使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Vector2d
的用法示例。
在下文中一共展示了Vector2d::rows方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pinv
// @from http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2010/01/msg00173.html
static bool pinv(const Eigen::Matrix2d& a, Eigen::Matrix2d& a_pinv)
{
// see : http://en.wikipedia.org/wiki/Moore-Penrose_pseudoinverse#The_general_case_and_the_SVD_method
if (a.rows() < a.cols())
return false;
// SVD
Eigen::JacobiSVD<Eigen::Matrix2d> svdA(a, Eigen::ComputeFullU | Eigen::ComputeFullV);
Eigen::Vector2d vSingular = svdA.singularValues();
// Build a diagonal matrix with the Inverted Singular values
// The pseudo inverted singular matrix is easy to compute :
// is formed by replacing every nonzero entry by its reciprocal (inversing).
Eigen::Vector2d vPseudoInvertedSingular(svdA.matrixV().cols(),1);
for (int iRow = 0; iRow < vSingular.rows(); iRow++)
{
if (fabs(vSingular(iRow)) <= 1e-10) // Todo : Put epsilon in parameter
{
vPseudoInvertedSingular(iRow, 0) = 0.;
}
else
{
vPseudoInvertedSingular(iRow, 0) = 1. / vSingular(iRow);
}
}
// A little optimization here
Eigen::Matrix2d mAdjointU = svdA.matrixU().adjoint().block(0, 0, vSingular.rows(), svdA.matrixU().adjoint().cols());
// Pseudo-Inversion : V * S * U'
a_pinv = (svdA.matrixV() * vPseudoInvertedSingular.asDiagonal()) * mAdjointU;
return true;
}