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使用分解?)