Gui*_*ris 8

您需要将矩阵转换为等级显示分解.例如FullPivLU.如果你有matrix3f它看起来像这样:

FullPivLU<Matrix3f> lu_decomp(your_matrix);
auto rank = lu_decomp.rank();
Run Code Online (Sandbox Code Playgroud)

编辑

分解矩阵是获得排名的最常用方法.尽管如此,LU并不是实现浮动值的最可靠方法,如维基百科上的排名文章所述

当应用于计算机上的浮点计算时,基本高斯消元(LU分解)可能是不可靠的,应该使用等级显示分解.一种有效的替代方案是奇异值分解(SVD),但还有其他较便宜的选择,例如带有旋转的QR分解(所谓的秩显示QR分解),它们在数值上比高斯消除更稳健.等级的数值确定需要用于确定何时值(例如来自SVD的奇异值)应被视为零的标准,该实际选择取决于矩阵和应用.

因此,您可以获得更准确的结果 Eigen::ColPivHouseholderQR< MatrixType >