Eigen:反转矩形矩阵(最小范数解)

Eigen: inverting rectangular matrix (least norm solution)

我有一个非常简单的问题,但不幸的是我在 Eigen 文档中找不到答案

我有一个"fat"矩阵A(行数小于列数)我想找到这个矩阵的最小范数伪逆。

理想情况下,我想通过 this 幻灯片中指定的最小范数 QR 分解找到它。

根据幻灯片,我可以使用这个公式

A.transpose() * (A * A.transpose()).inverse()

但我希望Eigen中有更优雅的解决方案

PS对不起我的英语

如果A是满秩那么你的公式是正确的,你也可以从A.transpose()HouseholderQR分解得到:

MatrixXd A(3,6);
A.setRandom();
HouseholderQR<MatrixXd> qr(A.transpose());
MatrixXd pinv;
pinv.setIdentity(A.cols(), A.rows());
pinv = qr.householderQ() * pinv;
pinv = qr.matrixQR().topLeftCorner(A.rows(),A.rows()).triangularView<Upper>().transpose().solve<OnTheRight>(pinv);

如果没有,那么您将不得不使用 Eigen::CompleteOrthogonalDecomposition,因为它的主要目的是解决最小范数问题,所以使用起来更简单:

CompleteOrthogonalDecomposition<MatrixXd> cqr(A);
pinv = cqr.pseudoInverse();