SVD для пошуку найбільшого власного значення матриці розміром 50x50 - я витрачаю значну кількість часу?


13

У мене є програма, яка обчислює найбільше власне значення багатьох реальних симетричних матриць розміром 50x50, виконуючи розклади сингулярних значень на всіх них. SVD - це вузьке місце в програмі.

Чи є алгоритми, які набагато швидше знаходять найбільше власне значення, чи оптимізація цієї частини не дасть великої віддачі від інвестицій?


Чи можете ви дати трохи більше інформації про свої матриці, наприклад, якщо щось відомо про їх структуру, діапазон їх власних значень або схожість між собою?
Педро

Це матриця коваріації ( ). Тестування показує, що всі, крім 5 або більше найбільших власних значень, близькі до нуля, і що найбільше власне значення має принаймні на 20% більше, ніж друге за величиною. Оскільки існує велика кількість власних значень, близьких до нуля, я вважаю, що діапазон не важливий? Її можна змінити до будь-якого діапазону. Шкала, яку я зараз використовую, дає мені діапазон від 150 до 200. XXT
Анна

Також матриця не є дуже тісною, тому проблема SVD добре обумовлена.
Анна

Оскільки є симетричним і позитивним (напів) визначеним, ви можете використовувати факторизацію Холеського замість SVD. Для факторизації Чолеського потрібно обчислити набагато менше флопів, ніж SVD, але, будучи точним методом, все-таки використовується O ( n 3 ) флопів. XXTO(n3)
Кен

@Anna: Ви випробували будь-який із запропонованих тут багатьох підходів? Мені було б дуже цікаво дізнатися, що найкраще працювало для вас ...
Педро,

Відповіді:


12

Залежно від точності, яка вам потрібна для найбільшого власного значення, ви можете спробувати використовувати Ітерацію потужності .

Для вашого конкретного прикладу я б пішов так далеко, щоб я не формував явно , але обчислював x X ( X T x ) у кожній ітерації. Обчислення A вимагало б операцій O ( n 3 ), тоді як для матричного векторного добутку потрібен лише O ( n 2 ) .A=XXTxX(XTx)AO(n3)O(n2)

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


1
Якщо найбільше власне значення на 20% більше, ніж наступне, ітерація потужності повинна зближуватися досить швидко (всі інші власні значення зменшуються в 5% в кожній ітерації, тому ви отримуєте одну цифру за кожні 13 ітерацій.
Вольфганг Бангерт

2
Методи підпростору Крилова суворо кращі, ніж силові методи, оскільки містять вектор ітерації потужності з однаковою кількістю ітерацій.
Джек Поульсон

1
@JackPoulson: Так, але обчислити кожну ітерацію дорожче ... Чи справді це варто для такої невеликої проблеми?
Педро

@ Педро: звичайно, для matvecs потрібна квадратична робота, а коефіцієнт власного вирішення Релея та подальше розширення є тривіальними в порівнянні.
Джек Поульсон

1
Код витрат? Оскільки @JackPoulson порушив цю проблему, B. Parlett et al (1982) ("Про оцінку найбільшого власного значення за алгоритмом Ланцоса") порівнюють метод потужності, метод потужності + прискорення Ейткена та застосування Ланцо, орієнтованого на найбільше власне значення реального симетрична (або ермітична) поз. деф. матриця. Вони роблять висновок, що метод Ланцоса є більш ефективним, якщо потрібна навіть скромна точність (першого власного значення щодо другої), і краще уникнути невідповідності.
хардмат

5

Якщо лише 5 власних значень є дуже значущими, алгоритм Ланчсоса з як множення матричного вектора повинен давати швидку лінійну конвергенцію після 5 початкових кроків, отже, досить точне найбільше власне значення з малою кількістю ітерацій.X(XTx)


Ти (@ArnoldNeumaier) думаєш про щось подібне , відповідно спрощене ( )? Цікаво, що він дає інше наближення від Ланцоса, якщо зберігається третій вектор, над тим же Крипровим підпростором. B=T=I
хардмат

Ні; Я мав на увазі стандартний алгоритм Ланчсоса, але поспіхом написав CG. Тепер виправлено.
Арнольд Ноймаєр

4

Для позитивної напіввизначеної матриці, такої як можливо, варто докласти зусиль для прискорення конвергенції зі зсувом спектра . Тобто, відповідна скалярная μ вибирається і спосіб подачі живлення на A - μ I замість A .A=XXTμAμIA

Кілька ітерацій основного методу живлення повинні дати вам приблизну оцінку найбільшого власного значення λ 1 . Якщо припустити домінуюче власне значення має кратність 1, а всі інші знаходяться в [ 0 , 5||Ax||/||x||λ1, тодіA-5[0,56λ1]мав би найбільше власне значення7A512λ1Iа решта в[-5712λ1.[512λ1,512λ1]

Іншими словами, ви б збільшили домінування найбільшого власного значення з 20% над наступним найбільшим до 40% над наступним найбільшим (абсолютним значенням) власного значення. Геометрична конвергенція методу потужності відповідно прискорилась. Після того, як найбільше власне значення знайдеться з достатньою точністю, λ 1 оцінюється шляхом додавання назад зрушення зміщення μ .AμIλ1μ

Зауважте, що вам не потрібно явно формувати оскільки ( A - μ I ) x = X ( X T x ) - μ x все ще можна обчислити з зусиллям O ( n 2 ) .AμI(AμI)x=X(XTx)μxO(n2)


Здається, це потребує гарного уявлення про те, якою є величина другого за величиною власного значення. Як би ви наблизили це в такому випадку?
Педро

λ1|λ2|/|λ1||λ2|/|λ1|λ2λ1за бажанням Я пропонував, яку вигоду ви побачите у справі, про яку Анна описує у коментарях під Запитанням.
хардмат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.