В моем случае я хочу решить недоопределенную систему уравнений, A * λ = b, с JacobiSVD решатель из Eigen (3.0.12).
Система линейных уравнений имеет следующую структуру в моей программе на C ++:
Коэффициент матрицы ():
0.6 5.68434e-20 -0.2
5.68434e-20 7.06819e-39 -4.26326e-20
-0.2 -4.26326e-20 0.4
RHS (б):
-1.962
2.78817e-19
-5.886
лямбда:
-9.81
3.94467e+19 <---------- error (Where does this come from?)
-19.62
Я также проверил это с помощью MATLAB:
http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm
На начальном этапе первые шаги моделирования являются приблизительно правильными. Но есть очень маленькая числовая ошибка, которая увеличивается при решении A * λ = b.
Затем происходит сбой системы, и мои результаты больше не верны, и я получаю результаты NaN.
Вот код:
/******** SVD ********/
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV);
lambda = svd.solve(b);
Что я сделал не так?
JacobiSVD рассматривает все ненулевые особые значения для решения. Я рекомендую использовать ColPivHouseholderQR.
Других решений пока нет …