Доброго времени суток!
Мне нужно сделать SVD (сингулярное) разложение квадратной матрицы A.

Размерность матрицы в моем случае может быть от 3х3 до 500х500.
С разложением матриц я столкнулся недавно.
Собственно само разложение на бумажке я научился делать, делаю так:

,
где

- транспонированная матрица А.
строю уравнение

,
откуда получаю степенное уравнение вида

где n - размерность матрицы
Если матрица 2х2 то уравнение квадратное, 3х3 кубическое, и тд.
Корни которого являются собственными числами матрицы В.
Далее я нахожу собственные вектора следующим образом:
строю уравнение

,
где

- это ранее найденное собственное число,

- искомый собственный вектор.
Точно так же найдя все собственные векторы, из которых я строю матрицу U.
Матрица S получается из корней собственных чисел расположенных по диагонали.
Матрицу V можно получить или аналогично U, приняв

или по формуле:

Теперь вопросы ))
1) Я покопался в книжках на предмет какие существуют методы сингулярного разложения,
и обнаружил велокое множество методов определения собственных чисел, собственных векторов и
самих сингулярных разложений. Вопрос к какому из методом относится описанный мной метод?
2) Описанный мной метод очень плохо перекладывается в код, так как надо решать степенные уравнения,
часто очень большой степени, это итерационные методы типа бисекции, метод хорд и тд.
Для нахождения собственных векторов, получаются такие системы уравнений, которые невозможно решить
стандартным методом, например Гаусса или Крамера.
Например:


Гаусс дает ответ {0,0}, в то время ясно что ответ {-4, 1}!
В виду отсутствия времени для изучения всех методов, прибегаю к вашему опыту.
Посоветуйте пожалуйста какой метод лучше всего использовать для SVD разложения в компьютерных программах.
Отражения Хаусхолдера, метод Якоби, и тд. И кратко по шагам суть действий метода, если не затруднит ))
3) Объясните пожалуйста в чем отличия всех этих методов, я имею ввиду по скорости, точности,
критичности к размерности матриц. По существу в общем в чем различия?
4) Я уже накопал много литературы, но все равно посоветуйте пожалуйста где почитать,
может ваша книжка окажется более полной и понятной.