2017-01-13 23 views
0

我嘗試使用Eigen使用QR分解,但從以下兩種方法得到的結果不同,請幫我找出錯誤! 謝謝。本徵QR分解結果不同於兩種方法

// Initialize the sparse matrix 
A.setFromTriplets(triplets.begin(), triplets.end()); 
A.makeCompressed(); 

//Dense matrix method 
MatrixXd MatrixA = A; 
HouseholderQR<MatrixXd> qr(MatrixA); 
MatrixXd Rr = qr.matrixQR().triangularView<Upper>(); 

//Sparse matrix method 
SparseQR < SparseMatrix <double>, COLAMDOrdering<int> > qr; 
qr.compute(A); 
SparseMatrix<double, RowMajor> Rr = qr.matrixR(); 

回答

1

這是因爲SparseQR進行重新排序列,以既減少填充和實現近秩揭示分解,類似ColPivHouseholderQR。更確切地說,HouseholderQR計算:A = Q*R,而SparseQR計算:A*P = Q*R。所以預計兩個三角形因素是不同的。

+0

感謝您的解釋,那我該如何得到矩陣R? 我嘗試使用: Rr = qr.matrixR()* qr.colsPermutation(); 但它似乎不正確 – zhaolewen

+0

您可以計算'qr.matrixR()* qr.colsPermutation()。inverse()',但結果不再是三角形。我不知道你的用例是什麼,但在大多數情況下,你可以用它來明確地處理額外的排列。 – ggael

相關問題