0
私はQigen分解をEigenを使用して試していますが、結果は次のようなトウの方法から得られますが、エラーを見つけるのを手伝ってください!おかげさまで 固有QR分解結果は2つの方法と異なります
私はQigen分解をEigenを使用して試していますが、結果は次のようなトウの方法から得られますが、エラーを見つけるのを手伝ってください!おかげさまで 固有QR分解結果は2つの方法と異なります
// 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つの三角要素が異なることが予想されます。
あなたの説明をお寄せいただきありがとうございます。 私は以下を使用しようとしています: Rr = qr.matrixR()* qr.colsPermutation(); しかし、それは正しくないようです – zhaolewen
'qr.matrixR()* qr.colsPermutation()。inverse()'を計算できますが、結果はもはや三角形にはなりません。あなたのユースケースはわかりませんが、ほとんどの場合、追加の順列を明示的に処理するためにそれを適用します。 – ggael