
线性代数定义向量空间列空间/行空间的维数。高斯消元法主元pivot的数量。行列式视角满秩 行列式 ! 0对于方阵。数值视角线性无关的行/列的最大数量。几何视角变换后的空间的维度。SLAM上下文为什么rank() 2意味着共面点因为 (3x3) 矩阵points3 * points3.transpose()表示点的散布。如果点处于二维平面其散布矩阵的秩为 2一个维度退化。协方差矩阵的秩2就是分布在平面上。1. 严谨的数学定义抓本质矩阵的秩指的是矩阵中线性无关的行或列向量的最大数目。如果是 3×3的矩阵秩最大是 3称为满秩。如果秩是 2说明虽然它有3行但其中一行可以用另外两行线性组合出来是“冗余”信息。2. 几何直觉结合SLAM理解把矩阵看作一个“空间变换器”秩 3它能将一个三维立方体变换成一个三维体体积不为零。秩 2它将三维空间“拍扁”成一个平面体积为零。秩 1它将三维空间压成一条线。3. 代码实锤为什么用rankTest.rank() 2来判断平面这正是你代码中最关键的一步cppEigen::Matrix3d planarTest points3 * points3.transpose(); // (3x3) // 如果 rankTest.rank() 2说明是平面场景points3是所有 3D 点组成的 3×N 矩阵。planarTest是这个点集的协方差矩阵未中心化。如果所有点共面那么这些点在三维空间中只分布在二维平面上没有撑起一个“立体”。因此这个矩阵的秩必定是2零空间对应平面法向量方向。如果点是随机分布在三维空间非共面这个矩阵的秩就是3。4. 秩在求解线性方程中的“致命”意义秩直接决定了方程 Axb 有没有解、有多少解满秩秩 未知数个数解唯一或者最小二乘解稳定。秩亏秩 未知数个数方程欠定解不唯一存在零空间Nullspace。在MLPnP中的体现正因为平面场景下矩阵秩亏为 2旋转矩阵第三列无法通过线性方程直接解出自由度消失所以代码才专门if (planar)将未知数colsA从 12 降为 9并利用叉积tmp.col(0) tmp.col(1).cross(tmp.col(2))强行补全旋转矩阵。 一句话总结矩阵的秩 矩阵撑起的空间维度。秩大 信息丰富约束强。秩小 信息冗余数据退化比如共面此时必须像代码里那样降维处理否则数学上算不出稳定的解。