Обратная матрица Eigen SparseQR не является точной, как в Matlab

В моем алгоритме я использую разреженную матрицу обратной операции и решаю ее, используя метод A*x=b, используя метод декомпозиции QR. На Matlab операция QR работает нормально.

Однако когда я попытался преобразовать код в C++ с помощью библиотеки Eigen, я не получил тот же ответ. В некоторых случаях наблюдается смещение некоторого значения вдоль каждого элемента вектора x по сравнению с результатами в Matlab. Однако это значение, которое вызывает сдвиг, является постоянным для всех элементов вектора.

Проблеск того, что я делаю:

Eigen::SparseMatrix<float> A(m, n);
Eigen::VectorXf b;
Eigen::SparseQR<Eigen::SparseMatrix<float>, Eigen::COLAMDOrdering<int>> solver; 
solver.compute(A);
Eigen::VectorXf x = solver.solve(b);

х мой последний вектор, который содержит результат A.inverse()*b не так ли?

Кроме того, я пытался решить ее как полную матрицу, но по-прежнему давал разные ответы на C++ по сравнению с Matlab.

Кто-нибудь здесь сталкивался с подобной проблемой? Если да, любая помощь или указатели приветствуются. С другой стороны, если с моим пониманием что-то не так, любая поправка также приветствуется.

Благодарю.

0 ответов

Другие вопросы по тегам