Неверные результаты с инвертированием в opencv

Я использую библиотеку 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

1

Решение

Ваша матрица плохо обусловлена ​​(слабая главная диагональ).
Попробуйте увеличить основные диагональные элементы, и, думаю, ошибка должна уменьшиться.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]