Обратная матрица 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.
Кто-нибудь здесь сталкивался с подобной проблемой? Если да, любая помощь или указатели приветствуются. С другой стороны, если с моим пониманием что-то не так, любая поправка также приветствуется.
Благодарю.