我必须在特征库上将MATLAB代码转换为C ++,但我在QR分解时遇到了一些问题,matlab有一个函数:
[Q,R]=qr(A,0); // A is m-by-n
它产生经济规模分解。如果m>n
,则只计算n
的第一列Q
和n
行的R
行。如果m<=n
,则与[Q,R]=qr(A)
相同。
我试图在特征库上计算它。但是A
是20000x1000
,所以在QR分解时总会有应用程序崩溃。我不知道如何在特征或其他方式上产生经济规模分解。
如何将[Q,R]=qr(A,0)
转换为C ++ / Eigen?
答案 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);