是否有一个易于使用的 c++ 库用于矩形矩阵的“薄”QR 分解?
Eigen 似乎只支持完整的 Q 矩阵。我可以取一个完整的 Q 并丢弃一些列,但是不计算它们会更有效吗?
问问题
4322 次
2 回答
3
Newmat完全符合您的要求。
要将 A 分解为 QR,您可以执行以下操作:
Matrix Q = A;
UpperTriangularMatrix R;
QRZ(Q, R)
如果 A 是 3x5 矩阵,则 R 将是 3x3,Q 也将是 3x5。
于 2012-03-08T20:50:56.693 回答
1
尽管这个问题有点老了,但记录一下:Eigen 没有显式计算 Q 矩阵,而是一系列 Householder 向量,可以直接与任何矩阵相乘(具有正确的行数)。
如果您实际上明确想要薄 Q 矩阵,只需乘以所需大小的单位矩阵:
#include <Eigen/QR>
#include <iostream>
int main()
{
using namespace Eigen;
MatrixXf A(MatrixXf::Random(5,3));
HouseholderQR<MatrixXf> qr(A);
MatrixXf thinQ = qr.householderQ() * MatrixXf::Identity(5,3);
std::cout << thinQ << '\n';
}
于 2017-10-12T21:43:16.040 回答