思路:Ax=0的超定最小二乘解为最小奇异值对应的右奇异向量。
1、OpenCV版代码实践:
SVD分解: A = U · W · Vt
cv::Mat w, u, vt;
cv::SVD::compute(matA, w, u, vt);
注意:代码求出的是右奇异矩阵的转置,因此其最小二乘解为vt.t()的最后一列。
2、Eigen版代码实践:
SVD分解: A = U · Σ · V
#include <Eigen/Dense>
Eigen::JacobiSVD<Eigen::MatrixXd> svd(A, Eigen::ComputeThinU | Eigen::ComputeThinV);
Eigen::MatrixXd V = svd.matrixV();
代码求出的是右奇异矩阵,没有转置,直接取矩阵V最后一列即可。