Qual è il modo più efficiente per calcolare l'autovettore di una matrice densa corrispondente all'autovalore di massima magnitudine?


10

Ho una densa matrice quadrata simmetrica reale. La dimensione è di circa 1000x1000. Devo calcolare il primo componente principale e chiedermi quale potrebbe essere l'algoritmo migliore per farlo.

Sembra che MATLAB usi gli algoritmi Arnoldi / Lanczos (per eigs). Ma leggendo su di loro non sono sicuro che abbiano qualche vantaggio rispetto alla semplice iterazione di potenza , poiché la mia matrice non è scarsa e sono interessato solo al primo autovettore.

Qualche consiglio qual è l'algoritmo più veloce in questo caso?


1
Sul mio computer, su una matrice simmetrica 1000 X 1000 generata casualmente, la funzione "automa" in R ha impiegato circa un secondo per calcolare tutti gli autovalori e i vettori, arrotondando per eccesso. Il tuo chilometraggio può variare, ma dubito che la scelta dell'algoritmo possa fare la differenza in orari del genere.

Sì, è vero ovviamente. Non sono davvero preoccupato di rendere il mio programma più veloce. Sono solo curioso di sapere se anche le tecniche più complicate menzionate sono considerate superiori in questo caso d'uso (denso, solo il primo autovettore) o se esistono tecniche diverse per matrici dense.

Intendi l'autovettore che corrisponde all'autovalore più grande o più piccolo? Sembra che tu voglia il primo.
Jack Poulson,

Sì, l'autovettore che corrisponde all'autovalore con la massima magnitudine.
Mika Fischer,

Risposte:


12

Il metodo più veloce dipenderà probabilmente dallo spettro e dalla normalità della tua matrice, ma in ogni caso gli algoritmi di Krylov dovrebbero essere strettamente migliori dell'iterazione di potenza. GW Stewart ha una bella discussione di questo problema nel Capitolo 4, Sezione 3 di Matrix Algorithms, Volume II: Eigensystems :

Il metodo di alimentazione si basa sull'osservazione che se ha un'eigenpair dominante poi sotto restrizioni lievi sul u l'vettori A k u produrre approssimazioni sempre più accurate per l'autovettore dominante. Tuttavia, ad ogni passo il metodo di alimentazione considera solo il singolo vettore A k u , che equivale a buttare via le informazioni contenute nei vettori precedentemente generati. Si scopre che queste informazioni sono preziose ... "UNuUNKuUNKu

e prosegue dimostrando che, per matrice diagonale 100 × 100 con l' i th valore diagonale impostato su 0,95 i (contando da i = 0 ), dopo 25 iterazioni il sottospazio di Krylov cattura l'autovettore dominante otto ordini di grandezza meglio di iterazione di potenza.100×100io.95ioio=0


Hmm, avrei pensato che MRRR fosse ora il metodo standard quando si vogliono solo alcuni autovettori ...
JM,

KO(Kn2+K2n+K3)Kn

Vedo; in qualche modo ho avuto l'impressione che tu dovessi tridiagonalizzare prima di fare Krylov. Grazie!
JM,

Lanczos sta gradualmente costruendo detta matrice tridiagonale.
Jack Poulson,

5

L'iterazione di potenza è la più semplice, ma come detto sopra probabilmente converrebbe molto lentamente se la matrice è molto non normale. Si ottiene un fenomeno "gobba" in cui la sequenza sembra divergere per molte iterazioni prima che inizi il comportamento asintotico.

Poiché la tua matrice è simmetrica, potresti considerare le iterazioni RQI, che nel caso simmetrico producono una convergenza cubica: http://en.wikipedia.org/wiki/Rayleigh_quotient_iteration .

Ciò che rende molto piacevoli le iterazioni di Arnoldi o Lanczos (almeno secondo me, ma non studio l'algebra lineare numerica) è che sono molto versatili. Di solito è possibile controllare quali autovalori ti danno e quanti ne ottieni. Questo è particolarmente vero nel caso simmetrico (e ancora meglio se la tua matrice è definita). Per problemi simmetrici sono molto robusti. Come scatola nera funzionano bene, ma sono anche molto ricettivi alle nuove informazioni sui problemi, come la capacità di risolvere i sistemi che coinvolgono la matrice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.