2017-01-13 16 views

答えて

1
// 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(); 

SparseQR行う列の並べ替えは、フィルインを低減し、ColPivHouseholderQRと同様略ランク明らか分解を達成するために両方のためです。より正確には、HouseholderQRは、A = Q*Rを計算するが、SparseQRは、A*P = Q*Rを計算する。したがって、2つの三角要素が異なることが予想されます。

+0

あなたの説明をお寄せいただきありがとうございます。 私は以下を使用しようとしています: Rr = qr.matrixR()* qr.colsPermutation(); しかし、それは正しくないようです – zhaolewen

+0

'qr.matrixR()* qr.colsPermutation()。inverse()'を計算できますが、結果はもはや三角形にはなりません。あなたのユースケースはわかりませんが、ほとんどの場合、追加の順列を明示的に処理するためにそれを適用します。 – ggael

関連する問題