Доброй ночи.
Пытаюсь реализовать алгоритм SVD-разложения матрицы X на U, S и V:
U - матрица собственных векторов матрицы
![$XX^T$ $XX^T$](https://dxdy-01.korotkov.co.uk/f/8/f/4/8f4e799eb697d2bc7c926048ee372f3f82.png)
, V - матрица собственных векторов
![$X^TX$ $X^TX$](https://dxdy-04.korotkov.co.uk/f/b/b/0/bb00fc42f7162d614390dfafb5e7fcdd82.png)
.
Проверяю правильность:
![$UU^T=I, VV^T=I$ $UU^T=I, VV^T=I$](https://dxdy-01.korotkov.co.uk/f/8/6/6/8669880b875fa9a99d4c5406d44c774e82.png)
- все отлично.
![$USV^T!=X$ $USV^T!=X$](https://dxdy-03.korotkov.co.uk/f/6/6/9/669f4502c1bce45854b1e704bb615b2882.png)
Стал искать ошибку в процедуре нахождения собственных векторов. Сначала использовал метод Якоби, и он не дал правильного SVD-разложения, хотя работал правильно. Написал QR-разложение, убедился в правильности, нашел с его помощью собственные вектора, но и он не дал верного SVD-разложения.
Потом заметил закопанную собаку в том, что собственные вектора инвариантны к изменению направления (знака), т.к. равенство Ax=lx при этом не нарушается.
Два метода поиска собств. векторов дали один результат с точностью до знака некоторых векторов.
Забил ту же матрицу в scilab - и он нашел правильное разложение. Матрица S совпадала с предыдущими, U и V отличались некоторыми знаками.
Понятно, почему SVD-разложения, найденные двумя способами, отличались друг от друга и от правильного разложение.
Если кто может, объясните, пожалуйста,
* почему разные методы диагонализации дают разные направления собственных векторов?
* есть ли какое-то "правильное" направление?
* как в сложившихся условиях найти правильное SVD-разложение?
Спасибо!