Здравствуйте, я работаю над проектом, связанным с распознаванием лиц, для которого я использую линейный дискриминантный анализ (LDA). LDA требует найти обобщенные собственные векторы для матрицы рассеяния между классами и с матрицей рассеяния внутри класса, и именно здесь я поражен. Я использую opencv с DevC++ для кодирования. В основном проблема выглядит так
A*v=lambda*B*v
где A и B — матрицы, для которых должны быть найдены обобщенные собственные векторы, лямбда — собственные значения, а v — векторы
При поиске этой проблемы многие люди предложили вычислить обратную величину B, а затем умножить на A * v.
(inv(B)*A)*v=lambda*v
а затем вычислить собственные векторы для inv(B)*A.
Это кажется хорошим решением, но в моем случае матрица рассеяния B почти сигулярна. Я обнаружил, что его определитель имеет порядок 10 ^ -36. Поэтому я не могу найти его инверсию и перейти к приведенному выше решению. Итак, может ли кто-нибудь предложить мне способ избавиться от этой проблемы, кроме как сказать код для обобщенной проблемы собственных значений отдельно.