如何在特征库中获得矩阵的秩?

时间:2015-06-25 05:31:09

标签: c++ matrix eigen rank eigen3

如何在rank中获取矩阵的eigen

2 个答案:

答案 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可能更可靠。