在QR分解上应用大型矩阵

时间:2017-06-18 14:49:20

标签: c++ eigen

我必须在特征库上将MATLAB代码转换为C ++,但我在QR分解时遇到了一些问题,matlab有一个函数:

[Q,R]=qr(A,0); // A is m-by-n

它产生经济规模分解。如果m>n,则只计算n的第一列Qn行的R行。如果m<=n,则与[Q,R]=qr(A)相同。

我试图在特征库上计算它。但是A20000x1000,所以在QR分解时总会有应用程序崩溃。我不知道如何在特征或其他方式上产生经济规模分解。

如何将[Q,R]=qr(A,0)转换为C ++ / Eigen?

1 个答案:

答案 0 :(得分:0)

MatrixXd A(m,n);    
HouseholderQR<MatrixXd> qr;  
qr.compute(A);  
temp= qr.matrixQR().triangularView<Upper>();  
Q= qr.householderQ() * Eigen::MatrixXd::Identity(m, n); 
R=temp.topRows(n);