Доброй ночи.
Пытаюсь реализовать алгоритм SVD-разложения матрицы X на U, S и V:
U - матрица собственных векторов матрицы
, V - матрица собственных векторов
.
Проверяю правильность:
- все отлично.
Стал искать ошибку в процедуре нахождения собственных векторов. Сначала использовал метод Якоби, и он не дал правильного SVD-разложения, хотя работал правильно. Написал QR-разложение, убедился в правильности, нашел с его помощью собственные вектора, но и он не дал верного SVD-разложения.
Потом заметил закопанную собаку в том, что собственные вектора инвариантны к изменению направления (знака), т.к. равенство Ax=lx при этом не нарушается.
Два метода поиска собств. векторов дали один результат с точностью до знака некоторых векторов.
Забил ту же матрицу в scilab - и он нашел правильное разложение. Матрица S совпадала с предыдущими, U и V отличались некоторыми знаками.
Понятно, почему SVD-разложения, найденные двумя способами, отличались друг от друга и от правильного разложение.
Если кто может, объясните, пожалуйста,
* почему разные методы диагонализации дают разные направления собственных векторов?
* есть ли какое-то "правильное" направление?
* как в сложившихся условиях найти правильное SVD-разложение?
Спасибо!