2017-06-18 70 views
0

我必須將MATLAB代碼轉換爲C++的本徵庫,但我有一些問題在QR分解,MATLAB具有的功能:應用上QR大型矩陣分解

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

它產生的經濟規模如果是m>n,則只計算Q的第一行n列和行的R。如果m<=n,這與[Q,R]=qr(A)相同。

我試圖在特徵庫上計算它。但A20000x1000,所以在QR分解時總會有應用程序崩潰。而且我不知道如何在特徵或其他方式上產生經濟規模分解。

如何將[Q,R]=qr(A,0)轉換爲C++/Eigen?

+0

你調試它爲什麼崩潰?你能提供你用來參考的C++代碼嗎? – Darklighter

+0

因爲Q是20000x20000.它太大了,我需要產生經濟規模的分解。 – jifeng

+1

http://eigen.tuxfamily.org/bz/show_bug.cgi?id=569(第一個結果爲»經濟規模分解特徵« – Darklighter

回答

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);