Як, наприклад, MATLAB обчислює SVD даної матриці? Я припускаю, що відповідь, ймовірно, включає обчислення власних векторів та власних значень A*A'
. Якщо це так, я також хотів би знати, як це обчислити?
Як, наприклад, MATLAB обчислює SVD даної матриці? Я припускаю, що відповідь, ймовірно, включає обчислення власних векторів та власних значень A*A'
. Якщо це так, я також хотів би знати, як це обчислити?
Відповіді:
Зазвичай це робиться за допомогою алгоритму Голуб-Рейнша, і ні, це не передбачає обчислення власних значень та власних векторів .
Побачити
Г. Х. Голуб та К. Рейнш. Рішення для розкладу сингулярного значення та найменших квадратів. Numerische Mathematik 14: 403-420, 1970.
Цей матеріал обговорюється в багатьох підручниках з числової лінійної алгебри.
Окрім (нині класичної) газети Голуб-Рейнша, що Брайан зазначає у своїй відповіді (я пов’язаний із версією статті " Довідник "), а також (також тепер класичним) документом попередника Голуб-Кахана , було ряд важливих зрушень в обчислюванні СВД з тих пір. По-перше, я повинен підсумувати, як працює звичайний метод.
Ідея обчислення SVD матриці якісно схожа на метод, що використовується для обчислення ейгендекомпозиції симетричної матриці (і, як зазначається в ОП, між ними існує інтимний зв’язок). Зокрема, один проходить у два етапи: перетворення на бідіагональну матрицю , а потім пошук SVD бідіагональної матриці. Це цілком аналогічно процедурі спочатку зменшення симетричної матриці до тридіагональної форми, а потім обчислення ейгендекомпозиції отриманого тридіагонального.
Для обчислення SVD бідіагональної матриці одним особливо цікавим проривом був документ Джима Деммеля та Велвела Кахана , який продемонстрував, що можна обчислити навіть крихітні сингулярні значення бідіагональної матриці з хорошою точністю, відповідним чином змінивши метод, спочатку запропонований у Голуб-Рейнш. Потім це було (ре?) Відкриття в DQD алгоритму , який є нащадком старого фактор-різницевого алгоритму Rutishauser. (Бересфорд Парлетт дає гарне обговорення тут.) Якщо служить пам'ять, це тепер кращий метод, який використовується внутрішньо LAPACK. Крім цього, завжди можна було вивести версії SVD щодо розробок рішення симетричних власних проблем; наприклад, є версія SVD для ділення і перемоги, а також версія SVD для старого алгоритму Якобі (яка може бути більш точною в деяких умовах).
Що стосується бідіагоналізації, то вдосконалений метод був викладений у роботі Барлоу , який вимагає трохи більше роботи, ніж оригінальна процедура Голуба та Рейнша, але дає більш точні бідіагональні матриці.