我有一个非常简单的问题但不幸的是我在Eigen文档中找不到答案
我有一个"胖"矩阵 A (行数小于cols数),我想找到这个矩阵的最小范数伪逆。
理想情况下,我希望通过this幻灯片中指定的最小范数 QR 分解来找到它。
根据幻灯片,我可以使用直接的方法来使用此公式
<div class="grid-outer">
<div class="cell">1</div>
<div class="cell">2</div>
<div class="cell">3</div>
<div class="cell">4</div>
</div>
但我希望在Eigen中有更优雅的解决方案
PS抱歉我的英文
答案 0 :(得分:2)
如果A是满级,那么您的公式是正确的,您也可以从HouseholderQR
的{{1}}分解获得它:
A.transpose()
如果没有,那么你将不得不使用更简单易用的Eigen::CompleteOrthogonalDecomposition,因为它的主要目的是解决最小范数问题:
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);