SVD per trovare il più grande autovalore di una matrice 50x50 - sto sprecando notevoli quantità di tempo?


13

Ho un programma che calcola il più grande autovalore di molte matrici reali simmetriche 50x50 eseguendo decomposizioni di valore singolare su tutte. SVD è un collo di bottiglia nel programma.

Esistono algoritmi che sono molto più veloci nella ricerca del più grande autovalore o l'ottimizzazione di questa parte non darebbe molto ritorno sull'investimento?


Potresti fornire qualche informazione in più sulle tue matrici, ad esempio se si sa qualcosa sulla loro struttura, sull'intervallo dei loro autovalori o sulla loro somiglianza?
Pedro,

È una matrice di covarianza ( ). I test mostrano che tutti gli autovalori, tranne cinque o più, sono vicini allo zero e che l'autovalore più grande è almeno del 20% più grande del secondo più grande. Dato che ci sono molti autovalori vicini allo zero, suppongo che l'intervallo non sia importante? Potrebbe essere riscalato in qualsiasi intervallo. La scala che sto usando attualmente mi dà un intervallo di 150 ~ 200. XXT
Anna,

Inoltre, la matrice non è molto singolare, quindi il problema SVD è ben condizionato.
Anna,

Poiché è simmetrico e positivo (semi) definito, è possibile utilizzare la fattorizzazione di Cholesky anziché SVD. La fattorizzazione di Cholesky richiede molti meno flop per il calcolo rispetto all'SVD ma essere un metodo esatto richiede ancora flop O ( n 3 ) . XXTO(n3)
Ken,

@Anna: hai provato qualcuno dei tanti approcci proposti qui? Sarei piuttosto curioso di sapere cosa ha funzionato meglio in pratica per te ...
Pedro

Risposte:


12

A seconda della precisione richiesta per l'autovalore più grande, è possibile provare a utilizzare l' Iterazione di potenza .

Per il tuo esempio specifico, arriverei al punto di non formare esplicitamente , ma di calcolare x X ( X T x ) in ogni iterazione. Il calcolo A richiederebbe operazioni O ( n 3 ) mentre il prodotto vettore matrice richiede solo O ( n 2 ) .A=XXTxX(XTx)AO(n3)O(n2)

Il tasso di convergenza dipende dalla separazione tra i due autovalori più grandi, quindi questa potrebbe non essere una buona soluzione in tutti i casi,


1
Se l'autovalore più grande è del 20% più grande di quello successivo, l'iterazione di potenza dovrebbe convergere piuttosto rapidamente (tutti gli altri autovalori vengono smorzati di un fattore 5/6 in ogni iterazione, in modo da ottenere una cifra ogni 13 iterazioni.
Wolfgang Bangerth

2
I metodi subspaziali di Krylov sono strettamente migliori dei metodi di potenza, in quanto contengono il vettore dall'iterazione di potenza con lo stesso numero di iterazioni.
Jack Poulson,

1
@JackPoulson: Sì, ma ogni iterazione è più costosa da calcolare ... Ne varrebbe davvero la pena per un problema così piccolo?
Pedro,

@Pedro: ovviamente, i matvec richiedono un lavoro quadratico e il quoziente di Rayleigh eigensolve e la successiva espansione sono banali in confronto.
Jack Poulson,

1
Spese di codice? Poiché @JackPoulson ha risolto il problema, B. Parlett et al (1982) ("Stima del più grande autovalore con l'algoritmo di Lanczos") confronta il metodo di alimentazione, il metodo di alimentazione + l'accelerazione di Aitken e un'applicazione di Lanczos mirata al più grande autovalore di un reale simmetrica (o eremitica) pos. def. matrice. Concludono che il metodo Lanczos è più efficiente se è necessaria anche un'accuratezza modesta (del primo autovalore rispetto al secondo) e migliore per evitare malintesi.
Hardmath,

5

Se solo 5 autovalori sono molto significativi, l'algoritmo di Lanczsos con come moltiplicazione matrice-vettore dovrebbe fornire una rapida convergenza lineare dopo 5 fasi iniziali, quindi un autovalore più grande abbastanza accurato con poche iterazioni.X(XTx)


(@ArnoldNeumaier) stai pensando a qualcosa del genere , opportunamente semplificato ( )? È interessante notare che fornisce un'approssimazione diversa da quella di Lanczos se viene mantenuto un terzo vettore, sullo stesso sottospazio di Krylov. B=T=I
Hardmath,

No; Intendevo l'algoritmo standard di Lanczsos ma avevo fretta di scrivere CG. Ora corretto.
Arnold Neumaier,

4

Per una matrice semi-definita positiva come può valere la pena di accelerare la convergenza con uno spostamento dello spettro . Cioè, un adeguato scalare μ è scelto e il metodo di alimentazione viene applicata A - μ I invece di A .A=XXTμAμIA

Alcune iterazioni del metodo di base del potere dovrebbero darti una stima approssimativa del più grande autovalore λ 1 . Supponendo che l'autovalore dominante abbia molteplicità 1 e che tutti gli altri siano in [ 0 , 5||Ax||/||x||λ1, quindiA-5[0,56λ1]un autovalore massimo7A512λ1Ie il resto in[-5712λ1.[512λ1,512λ1]

In altre parole, aumenteresti il ​​dominio dell'autovalore più grande dal 20% sul successivo maggiore al 40% sul successivo autovalore più grande (valore assoluto di un). La convergenza geometrica del metodo di alimentazione accelererebbe di conseguenza. Una volta che il più grande autovalore di è stato trovato con sufficiente precisione, λ 1 è stimato aggiungendo nuovamente lo spostamento μ che era stato rimosso.AμIλ1μ

AμI(AμI)x=X(XTx)μxO(n2)


Ciò sembrerebbe richiedere una buona idea di quale sia la grandezza del secondo autovalore più grande. Come lo approssimeresti in questo caso?
Pedro,

λ1|λ2|/|λ1| (throwing in abs. values that are unnecessary for the pos. semi-definite case at hand). In turn observed rates of convergence can be used to estimate |λ2|/|λ1|, and hence the size of λ2 relative to λ1 if desired. I was suggesting what benefit you'd see in a case such as Anna describes in her comments below the Question.
hardmath
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.