2017-01-13 1 views
0

Я пытаюсь использовать QR-декомпозицию с использованием Eigen, но результаты получают следующие методы буксировки, пожалуйста, помогите мне узнать об ошибке! Спасибо.Результаты декомпозиции Eigen 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. Таким образом, ожидается, что два треугольных фактора R отличаются.

+0

Спасибо за ваше объяснение, тогда как мне получить матрицу? Я пытаюсь использовать: Rr = qr.matrixR() * qr.colsPermutation(); Но это кажется неправильным – zhaolewen

+0

Вы можете вычислить 'qr.matrixR() * qr.colsPermutation(). Inverse()', но результат больше не будет треугольным. Я не знаю, каков ваш прецедент, но в большинстве случаев вы его адаптируете для явного рассмотрения дополнительной перестановки. – ggael

Смежные вопросы