c++ - 从 QR 对象获取 R 矩阵

标签 c++ r matrix eigen

我有以下R代码

P <- matrix(...)
qrP <- qr(t(P))
qR <- qr.R(qrP)

其中 P 作为输入给出。

我正在尝试使用 Eigen 在 C++ 中编写相同的代码:

auto qrP = P.transpose().fullPivHouseholderQr();
auto qr = qrP.matrixQR().template triangularView<Upper>();

但问题是矩阵不同(RC++)。我是否以错误的方式计算 qr 矩阵?

这是我打印 qR 对角线时得到的结果:

diag(qR)
# -1.0000000 -2.1718017 -0.4788378  0.0000000  0.0000000

cout << qr.diagonal();
// -370.247 1.37452 1 -1.5099e-14 -1.16018e-14

最佳答案

在 Eigen 版本中,您使用具有完全旋转的 QR 分解,而 R 调用 Lapack 的 DGEQP3 例程,该例程对应于具有列旋转的 QR。在 Eigen 中,它可以通过 colPivHouseholderQr 方法或 ColPivHouseholderQR 类获得。

此外,您在这里部分地滥用了 auto 关键字。请看这个note 。因此,更安全且更接近 R 的实现将是:

ColPivHouseholderQR<MatrixXd> qrT(T.transpose());
MatrixXd q = qrT.matrixQR().triangularView<Upper>();
std::cout << q.diagonal().transpose() << std::endl;

关于c++ - 从 QR 对象获取 R 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076284/

相关文章:

c++ - 将二维数组插入 vector 并删除数组,但会导致段错误

c++ - 将 vector<cv::Point3f> 转换为 CV_32FC3 类型的 cv::Mat

c++ - 删除继承自QWidget的对象,WA_DeleteOnClose段错误

matlab - 计算矩阵中值的唯一组合数

image - 在 TIFF 中绘制热图时出现垂直白线

r - 使用 tidyr 按向量给出的特定顺序选择列

python - 解释 numpy 中 dim、shape、rank、dimension 和 axis 之间的区别

c++ - 几何变换

c++ - 静态链接到库但仍需要 dll 才能运行的程序

r - R markdown 包中图像的路径