C++ 如何在特征库中求矩阵的秩?

C++ 如何在特征库中求矩阵的秩?,c++,matrix,eigen,rank,eigen3,C++,Matrix,Eigen,Rank,Eigen3,如何在中获得矩阵?您需要将矩阵转换为显示秩的分解。例如FullPivLU。如果您有一个矩阵x3f,它如下所示: FullPivLU<Matrix3f> lu_decomp(your_matrix); auto rank = lu_decomp.rank(); FullPivLU-lu-decomp(你的矩阵); 自动排名=lu_decomp.rank(); 编辑 分解矩阵是获得秩的最常用方法。尽管如此,LU并不是实现浮动值的最可靠方法,如 当应用于计算机上的浮点计算时,basic

如何在中获得矩阵?

您需要将矩阵转换为显示秩的分解。例如
FullPivLU
。如果您有一个
矩阵x3f
,它如下所示:

FullPivLU<Matrix3f> lu_decomp(your_matrix);
auto rank = lu_decomp.rank();
FullPivLU-lu-decomp(你的矩阵);
自动排名=lu_decomp.rank();
编辑

分解矩阵是获得秩的最常用方法。尽管如此,LU并不是实现浮动值的最可靠方法,如

当应用于计算机上的浮点计算时,basic 高斯消去(LU分解)可能不可靠,并且 应改用显示等级的分解。有效的 另一种方法是奇异值分解(SVD),但也有 其他成本较低的选择,如带枢轴的QR分解 (所谓的秩揭示QR分解),其中 数值上比高斯消去法更稳健。数值测定 秩的定义需要一个标准来决定何时使用一个值,例如 奇异值从奇异值分解,应视为零,一个实用的 选择取决于矩阵和应用程序


因此,您可以使用
Eigen::ColPivHouseholderQR

使用QR或SVD分解获得更精确的结果,并检查结果矩阵是否也有效。SVD可能更可靠

从矩阵中构建FullPivLU或ColPivHouseholderQR或任何东西,它们具有
rank()
。计算分解性能比计算rank本身好吗?(为什么eigen使用分解?)