You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eigen的ColPivHouseholderQR分解中获取Pivot矩阵?

提取ColPivHouseholderQR中的置换矩阵P

Eigen的ColPivHouseholderQR类提供了直接获取列置换矩阵的方法,对应的接口是colsPermutation()——它返回一个PermutationMatrix对象,这是Eigen对置换矩阵的高效存储形式,你可以直接将其转换为普通稠密矩阵(比如MatrixXd)得到公式中的P。

代码示例

#include <Eigen/Dense>
#include <iostream>

int main() {
    // 定义示例矩阵A
    Eigen::MatrixXd A(3, 3);
    A << 1, 2, 3,
         4, 5, 6,
         7, 8, 9;

    // 执行带列主元的QR分解
    Eigen::ColPivHouseholderQR<Eigen::MatrixXd> qr(A);

    // 获取置换矩阵P(先得到PermutationMatrix,再转成稠密矩阵)
    Eigen::MatrixXd P = qr.colsPermutation();

    // 验证:A*P 是否等于 Q*R
    Eigen::MatrixXd Q = qr.householderQ();
    Eigen::MatrixXd R = qr.matrixQR().triangularView<Eigen::Upper>();
    std::cout << "A*P:\n" << A * P << "\n\n";
    std::cout << "Q*R:\n" << Q * R << "\n";

    return 0;
}

关键说明

  • colsPermutation()返回的PermutationMatrix内部仅存储置换的索引,比普通矩阵更节省内存和计算资源。如果只是用于矩阵乘法等操作,直接用PermutationMatrix即可,无需转换;如果需要显式的矩阵形式,再转成MatrixXd或其他稠密矩阵类型。
  • 注意公式A*P = Q*R中,P是列置换矩阵,对应列的重排操作。colsPermutation()返回的就是这个矩阵,不需要额外的转置或调整。

内容的提问来源于stack exchange,提问作者Hamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:29:52