【问题标题】:Eigen: inverting rectangular matrix (least norm solution)Eigen:反转矩形矩阵(最小范数解)
【发布时间】:2017-08-16 11:53:48
【问题描述】:

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

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

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

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

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

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

PS 对不起我的英语

【问题讨论】:

  • 您需要实际的(伪)逆,还是只想解方程?
  • @chtz 我需要逆向。该矩阵的分量将进一步用于最大最小二乘问题。

标签: matrix linear-algebra eigen eigen3 matrix-inverse


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多