Який найефективніший спосіб обчислити власний вектор щільної матриці, що відповідає власній величині найбільшої величини?


10

У мене щільна реальна симетрична квадратна матриця. Розмір - близько 1000x1000. Мені потрібно обчислити перший головний компонент і цікавитись, який найкращий алгоритм для цього може бути.

Схоже, що MATLAB використовує алгоритми Арнольді / Ланцоса (для eigs). Але, читаючи про них, я не впевнений, чи мають вони переваги перед простою ітерацією потужності , оскільки моя матриця не є рідкою, і мене цікавить лише перший власний вектор.

Будь-які рекомендації, який найшвидший алгоритм у цьому випадку?


1
На моєму комп'ютері на випадково генерованій 1000-симетричній матриці 1000 X 1000 функція "власне" в R зайняла приблизно одну секунду для обчислення всіх власних значень і векторів, округлюючи їх. Ваш пробіг може відрізнятися, але я сумніваюся, що ваш вибір алгоритму має будь-яку різницю в таких термінах.

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

Ви маєте на увазі власний вектор, що відповідає найбільшому чи найменшому власному значенню? Це здається, що ти хочеш колишнього.
Джек Поульсон

Так, власний вектор, що відповідає власній величині з найбільшою величиною.
Міка Фішер

Відповіді:


12

Найшвидший метод, ймовірно, залежатиме від спектру та нормальності вашої матриці, але в усіх випадках алгоритми Крилова повинні бути суворо кращими, ніж ітерація потужності. GW Стюарт приємно обговорив це питання у розділі 3 розділу 3 матричних алгоритмів, том II: власні системи :

Метод потужності заснований на спостереженні, що якщо має домінуюче власнепорядкування, то при м'яких обмеженнях векторів виробляють все більш точні наближення до домінуючого власного вектора. Однак на кожному кроці силовий метод враховує лише одиничний вектор , що означає викидання інформації, що міститься в генерованих раніше векторах. Виявляється, ця інформація цінна ... "у А к у А к уAuAkuAku

і він продовжує показувати, що для діагональної матриці з -ї діагональною величиною, встановленою на (рахуючи від ), після 25 ітерацій підпростір Крилова фіксує домінуючий власний вектор на вісім порядків краще, ніж ітерація потужності.i .95 i i = 0100×100i.95ii=0


Гм, я б подумав, що MRRR тепер є стандартним методом, коли потрібно просто кілька власних векторів ...
JM

kO(kn2+k2n+k3)kn

Розумію; якось у мене склалося враження, що вам потрібно спочатку тридіагоналізувати, перш ніж робити Крилова. Дякую!
JM

Ланцос фактично поступово нарощує зазначену тридіагональну матрицю.
Джек Поульсон

5

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

Оскільки ваша матриця симетрична, ви можете розглянути ітерації RQI, що в симетричному випадку дає кубічну конвергенцію: http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration .

Що робить ітерації Арнольді чи Ланцоса дуже приємними (принаймні, на мою думку, але я не досліджую чисельну лінійну алгебру) - це те, що вони дуже універсальні. Зазвичай можна контролювати, які власні значення вони дають вам і скільки ви отримуєте. Особливо це стосується симетричного випадку (а ще краще, якщо ваша матриця визначена). Для симетричних задач вони дуже надійні. Як чорний ящик вони добре працюють, але вони також дуже сприйнятливі до нової проблемної інформації, наприклад, здатності вирішувати системи, що включають матрицю.

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