Я использую библиотеку opencv в C ++ для обращения матрицы. Я использую функцию инвертирования с флагом DECOMP_SVD. Для матриц, которые не являются единичными, он вычисляется с использованием метода SVD.
Однако он дает мне неправильный ответ для сингулярных матриц (определитель = 0), когда я сравниваю его с выводом в Matlab для той же инверсии.
Ответ отклонен с запасом 1e + 4!
Методы, которые я использовал в matlab, это pinv () и svd ().
pinv () использует метод Мура-Пенроуза.
Нужна помощь
Заранее спасибо!
Пример :
original =
0.2667 0.0667 -1.3333 2.2222
0.0667 0.0667 -0.0000 0.8889
-1.3333 -0.0000 8.8889 -8.8889
2.2222 0.8889 -8.8889 20.7408Inverse from matlab =
1.0e+04 *
9.8888 -0.0000 0.7417 -0.7417
-0.0000 9.8888 -0.7417 -0.7417
0.7417 -0.7417 0.1113 0.0000
-0.7417 -0.7417 0.0000 0.1113
Ваша матрица плохо обусловлена (слабая главная диагональ).
Попробуйте увеличить основные диагональные элементы, и, думаю, ошибка должна уменьшиться.
Других решений пока нет …