向量的零空间
简单说SVD 能给出零空间是因为任何矩阵的右奇异向量中对应奇异值为 0 的那些列正好张成该矩阵的零空间。下面针对 bearing vector 的情况具体解释。2. 代码对应cppEigen::JacobiSVDEigen::MatrixXd, Eigen::HouseholderQRPreconditioner svd_f(f_current.transpose(), Eigen::ComputeFullV); // 对 f^T (1x3) 做 SVD nullspaces[i] svd_f.matrixV().block(0, 1, 3, 2); // 取 V 的后面两列索引 1,2f_current.transpose()是 1×3 的行向量。matrixV()返回 3×3 的 VV列是标准正交基。block(0,1,3,2)从第 1 列开始取 2 列恰好就是对应零奇异值的 v2,v3构成零空间基。3. 为什么不用特征分解或直接叉乘叉乘只能得到一个与 ff 正交的向量比如任意不共线向量做叉乘但无法直接得到一对正交归一的基而 SVD 自动给出正交基。多搞几步也能得到正交基特征分解ff⊤虽然也能得到零空间但数值稳定性和方便程度不如直接对原矩阵 SVD。这里用 SVD 一劳永逸地得到了完美正交的零空间矩阵便于后续投影和协方差变换。一句话总结对 f⊤f⊤ 做 SVD秩为 1有两个零奇异值它们对应的右奇异向量就是零空间。这正是 MLPnP 消去深度参数的关键一步。