Як обчислюється SVD матриці на практиці


11

Як, наприклад, MATLAB обчислює SVD даної матриці? Я припускаю, що відповідь, ймовірно, включає обчислення власних векторів та власних значень A*A'. Якщо це так, я також хотів би знати, як це обчислити?


2
Дивіться en.wikipedia.org/wiki/…
lhf

4
Власне, ні, це не передбачає обчислення власних векторів і значень ! Це значно знизило б точність результату. AAT
Майкл Грант

Відповіді:


11

Зазвичай це робиться за допомогою алгоритму Голуб-Рейнша, і ні, це не передбачає обчислення власних значень та власних векторів . AAT

Побачити

Г. Х. Голуб та К. Рейнш. Рішення для розкладу сингулярного значення та найменших квадратів. Numerische Mathematik 14: 403-420, 1970.

Цей матеріал обговорюється в багатьох підручниках з числової лінійної алгебри.


13

Окрім (нині класичної) газети Голуб-Рейнша, що Брайан зазначає у своїй відповіді (я пов’язаний із версією статті " Довідник "), а також (також тепер класичним) документом попередника Голуб-Кахана , було ряд важливих зрушень в обчислюванні СВД з тих пір. По-перше, я повинен підсумувати, як працює звичайний метод.

Ідея обчислення SVD матриці якісно схожа на метод, що використовується для обчислення ейгендекомпозиції симетричної матриці (і, як зазначається в ОП, між ними існує інтимний зв’язок). Зокрема, один проходить у два етапи: перетворення на бідіагональну матрицю , а потім пошук SVD бідіагональної матриці. Це цілком аналогічно процедурі спочатку зменшення симетричної матриці до тридіагональної форми, а потім обчислення ейгендекомпозиції отриманого тридіагонального.

Для обчислення SVD бідіагональної матриці одним особливо цікавим проривом був документ Джима Деммеля та Велвела Кахана , який продемонстрував, що можна обчислити навіть крихітні сингулярні значення бідіагональної матриці з хорошою точністю, відповідним чином змінивши метод, спочатку запропонований у Голуб-Рейнш. Потім це було (ре?) Відкриття в DQD алгоритму , який є нащадком старого фактор-різницевого алгоритму Rutishauser. (Бересфорд Парлетт дає гарне обговорення тут.) Якщо служить пам'ять, це тепер кращий метод, який використовується внутрішньо LAPACK. Крім цього, завжди можна було вивести версії SVD щодо розробок рішення симетричних власних проблем; наприклад, є версія SVD для ділення і перемоги, а також версія SVD для старого алгоритму Якобі (яка може бути більш точною в деяких умовах).

Що стосується бідіагоналізації, то вдосконалений метод був викладений у роботі Барлоу , який вимагає трохи більше роботи, ніж оригінальна процедура Голуба та Рейнша, але дає більш точні бідіагональні матриці.


1
@Jack, ти бачив це випадково?
JM

Дивно, але цього не було!
Джек Поульсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.