2017-01-13 26 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

相关问题