答案 0 :(得分:8)
您需要将矩阵转换为等级显示分解。例如FullPivLU
。如果你有一个matrix3f
,它看起来像这样:
FullPivLU<Matrix3f> lu_decomp(your_matrix);
auto rank = lu_decomp.rank();
修改强>
分解矩阵是获得排名的最常用方法。虽然如rank article on wikipedia
所述,LU不是实现浮动值的最可靠方法当应用于计算机上的浮点计算时,基本 高斯消元(LU分解)可能是不可靠的,并且a 应该使用秩显示分解。一个有效的 替代方案是奇异值分解(SVD),但也有 其他较便宜的选择,例如带有旋转的QR分解 (所谓的排名 - 揭示QR分解),更多 数值上比高斯消元更稳健。数字测定 排名需要一个标准来决定何时输入一个值,例如a 来自SVD的奇异值,应视为零,实用 选择取决于矩阵和应用程序。
因此,您可以使用Eigen::ColPivHouseholderQR< MatrixType >
答案 1 :(得分:1)
使用QR或SVD分解并检查结果矩阵也应该有效。 SVD可能更可靠。