从QR对象中获取R矩阵
Get the R matrix from QR object
我有以下R
代码
P <- matrix(...)
qrP <- qr(t(P))
qR <- qr.R(qrP)
其中CCD_ 2被给出作为输入。
我正在尝试使用Eigen:在C++
中编写相同的代码
auto qrP = P.transpose().fullPivHouseholderQr();
auto qr = qrP.matrixQR().template triangularView<Upper>();
但问题是矩阵不同(R
与C++
)。我是不是用错误的方法计算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
关键字。请看这张纸条。因此,一个更安全、更接近R
的实现是:
ColPivHouseholderQR<MatrixXd> qrT(T.transpose());
MatrixXd q = qrT.matrixQR().triangularView<Upper>();
std::cout << q.diagonal().transpose() << std::endl;
相关文章:
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 获取嵌套的 JSON 数组和矩阵C++
- 如何将矩阵类限制为仅获取"XO"或""。
- 如何从ModelViewProjection矩阵中获取相机原点?(DX11)
- 通过提供rowIndices列表从矩阵中获取行
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- C++/Eigen:获取为 MatrixBase 编写的模板的矩阵参数类型
- c ++寻找一种干净有效的方法来获取子矩阵
- 从eigen3矩阵中获取唯一的值
- 为什么从矩阵中获取最大值的函数建议 ->无法将 'int (*)[C]' 转换为 'int (*)[0]
- 如何制作 n*n 矩阵的输出文件,通过从用户那里获取 n,并成对生成的数字
- 犰狳:从稀疏矩阵中获取稀疏行向量的非零位置
- C++矩阵-获取列数,其中最低值与后面列中最高值位于同一行
- (简单C++)从文件中获取带有向量的矩阵
- 从eigen :: vectorxd获取矩阵视图/块而无需复制(共享内存)
- 特征 - 从地图获取矩阵
- 使用邻接矩阵获取给定节点的所有边缘
- 获取存储在矩阵中的图像 ROI 的平均 R、G 和 B
- 获取 CUDA 设备中的原始矩阵索引
- 我不知道如何为从文件中读入的矩阵获取常量值