Инверсия матрицы трудна в матрице, когда имеет дело с разреженной матрицей - PullRequest
0 голосов
/ 19 сентября 2018

Я реализую алгоритм, который связан с разреженной инверсией матрицы.

Код:

kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))*F_x*phi_t;

Я записываю код в matlab.Это дает мне предупреждение Матрица близка к единственному или плохо масштабируется.Результаты могут быть неточными.RCOND = 4.419037e-18. .Но согласно моему алгоритму инверсия матрицы является важной частью.Итак, я пытаюсь найти какой-нибудь эффективный способ инверсии матриц. Итак, я узнаю по этой ссылке , как точно вычислить инверсию матрицы?
Так что я изменил свой код в соответствии с рекомендациями.

kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))\F_x*phi_t;

После этого я получаю ошибку Ошибка при использовании \ Matrix размеры должны совпадать.

Ошибка в EKF_SLAM_known (строка 105) kapa_t = phi_t F_x ' (inv (inv (R_t) + F_x phi_t F_x')) \ F_x * phi_t;

Я использую алгоритм enter image description here

Здесь строка № 8 алгоритма эквивалентна коду kapa_t = phi_t F_x ' (inv (inv (R_t) + F_x phi_t )F_x ')) F_x phi_t;

Что мне делать с моим кодом, чтобы избавиться от этого предупреждения.

1 Ответ

0 голосов
/ 19 сентября 2018
kapa_t=phi_t*F_x'*(inv(inv(R_t)+F_x*phi_t*F_x'))\F_x*phi_t;

должно быть

kapa_t=phi_t*F_x'*((inv(R_t)+F_x*phi_t*F_x')\F_x)*phi_t;

Оператор A \ B примерно эквивалентен inv(A) * B, когда A квадратный, поэтому вам не нужен внешний inv.

...