代码之家  ›  专栏  ›  技术社区  ›  Daiver

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

  •  1
  • Daiver  · 技术社区  · 7 年前

    我有一个“胖”矩阵 A.

    理想情况下,我想通过最小范数找到它 QR码 this 幻灯片。

    根据幻灯片,我可以通过使用这个公式使用直接的方法来实现这一点

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

    但我希望在本征函数中有更优雅的解

    1 回复  |  直到 7 年前
        1
  •  2
  •   ggael    7 年前

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

    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();