Algoritmo degli autovalori di Jacobi

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

In algebra lineare, l'algoritmo degli autovalori di Jacobi è un metodo iterativo per il calcolo degli autovalori e degli autovettori di una matrice simmetrica reale (processo noto come diagonalizzazione). Prende il nome da Carl Gustav Jacob Jacobi, che per primo propose il metodo nel 1846,[1] ma divenne ampiamente utilizzato solo negli anni '50 con l'avvento dei computer.[2]

Descrizione[modifica | modifica wikitesto]

Sia una matrice simmetrica e una matrice di rotazione di Givens. Si dimostra che la matrice

è simmetrica e simile a .

Inoltre, ha i seguenti valori:

dove e .

Essendo ortogonale, E hanno la stessa norma di Frobenius (la somma delle radici quadrate dei quadrati di tutti gli elementi). In ogni caso, è possibile scegliere tale che , in tal caso ha una somma maggiore dei quadrati sulla diagonale:

Imponendo uguale a 0, e riorganizzando i termini, si ottiene:

Se , allora

Per ottimizzare questo effetto, dovrebbe essere l'elemento fuori diagonale con il valore assoluto più grande, chiamato pivot .

Il metodo degli autovalori di Jacobi esegue ripetutamente rotazioni finché la matrice non diventa quasi diagonale. Iterando questo processo, gli elementi nella diagonale sono approssimazioni degli autovalori (reali) di S.

Convergenza[modifica | modifica wikitesto]

Se è un elemento pivot, allora per definizione per .

Si definisce come la somma dei quadrati di tutti gli elementi fuori diagonale di . Essendo che ha esattamente elementi fuori diagonale, si ha che O .

Di conseguenza . Questo implica oppure ; in altre parole, la sequenza delle rotazioni di Jacobi converge almeno linearmente di un fattore ad una matrice diagonale.

Un numero di rotazioni di Jacobi sono chiamate spazzate; si definisce con il risultato delle spazzate. La stima precedente rende

 ;

Ovvero, la sequenza di spazzate converge almeno linearmente con un fattore ≈ .

Tuttavia il seguente risultato di Schönhage[3] fornisce una convergenza localmente quadratica. A tal fine sia S la presenza di m autovalori distinti con molteplicità , e sia d > 0 la distanza più piccola tra due autovalori diversi. Chiamiamo un numero di

rotazioni di Jacobi una spazzata di Schönhage. Se denota il risultato, allora

.

Quindi la convergenza diventa quadratica non appena

Costo[modifica | modifica wikitesto]

Ogni rotazione di Jacobi può essere eseguita in O(n) passi quando l'elemento pivot p è noto. Tuttavia la ricerca di p richiede l'ispezione di tutti gli N ≈ 1/2 n 2 elementi fuori diagonale. Possiamo ridurre anche questo procedimento alla complessità O(n) se introduciamo un array di indici aggiuntivo , con la proprietà che è l'indice dell'elemento più grande nella riga i, (i = 1, ..., n − 1) dell'attuale S. Allora, gli indici del pivot ( k, l ) devono essere una delle coppie .

Anche l'aggiornamento dell'array dell'indice può essere eseguito con complessità nel caso medio O(n): in primo luogo, l'elemento maggiore nelle righe aggiornate k e l può essere trovato nei passaggi O(n). Nelle altre righe i cambiano solo gli elementi nelle colonne k e l. Iterando su queste righe, se non è né kl, è sufficiente confrontare il vecchio massimo in con i nuovi elementi, aggiornando se necessario. Se dovrebbe essere uguale a k o ad l, e l'elemento corrispondente è diminuito durante l'aggiornamento, il massimo sulla riga i deve essere trovato da zero nella complessità O(n). Tuttavia, ciò avverrà in media solo una volta per rotazione. Pertanto, ogni rotazione ha complessità nel caso medio O( n ), e ogni spazzata ha complessità media O (n 3), che equivale a una moltiplicazione di matrici. Inoltre il deve essere inizializzato prima dell'avvio del processo, operazione che può essere eseguita in n 2 passaggi.

Tipicamente, il metodo di Jacobi converge alla precisione numerica dopo un piccolo numero di passaggi. Si noti che più autovalori riducono il numero di iterazioni, in quanto .

Algoritmo[modifica | modifica wikitesto]

Il seguente algoritmo è una descrizione del metodo Jacobi in notazione di tipo matematico. Questo algoritmo calcola un vettore e che contiene gli autovalori, e una matrice E che contiene i corrispondenti autovettori; di conseguenza, ogni è un autovalore e ogni colonna un autovettore ortonormale per , io = 1, ..., n .

Appunti[modifica | modifica wikitesto]

1. L'array logico changed mantiene lo stato di ciascun autovalore. Se il valore numerico di o viene modificato durante un'iterazione, il componente corrispondente di changed viene impostato su true, altrimenti su false. La variabile intera state conta il numero di componenti di changed che hanno valore true . L'iterazione si interrompe non appena state è uguale a 0. Ciò significa che nessuna delle approssimazioni ha recentemente cambiato il suo valore, e quindi non è molto probabile che ciò accada se l'iterazione continua. Qui si presuppone che le operazioni in virgola mobile vengano arrotondate in modo ottimale al numero in virgola mobile più vicino.

2. Il triangolo superiore della matrice S viene distrutto, mentre il triangolo inferiore e la diagonale rimangono invariati. Pertanto, è possibile ripristinare S se necessario, seguendo il seguente algoritmo:

3. Gli autovalori non sono necessariamente in ordine decrescente. Ciò può essere ottenuto mediante un semplice algoritmo di ordinamento.

4. L'algoritmo è scritto utilizzando la notazione matriciale (array basati su 1 invece che su 0).

5. Quando si implementa l'algoritmo, la parte specificata utilizzando la notazione matriciale deve essere eseguita simultaneamente.

6. Questa implementazione non tiene conto correttamente del caso in cui una dimensione è un sottospazio indipendente. Ad esempio, nel caso in cui questo algoritmo analizzi una matrice diagonale, l'implementazione mostrata in precedenza non terminerà mai, poiché nessuno degli autovalori cambierà. Pertanto, nelle implementazioni reali, è necessario aggiungere ulteriore logica per tenere conto di questo caso.

Esempio[modifica | modifica wikitesto]

Sia

Quindi jacobi produce i seguenti autovalori e autovettori dopo 3 scansioni (19 iterazioni) :

Applicazioni per matrici reali simmetriche[modifica | modifica wikitesto]

Quando si conoscono gli autovalori (e gli autovettori) di una matrice simmetrica, si calcolano facilmente i seguenti valori.

Valori singolari
I valori singolari di una matrice (quadrata). sono le radici quadrate degli autovalori (non negativi) di . Nel caso di una matrice simmetrica si ha che , quindi i valori singolari di sono i valori assoluti degli autovalori di .
Norma di ordine 2 e raggio spettrale
La norma di ordine 2 di una matrice A è la norma basata sulla norma vettoriale euclidea; cioè, il valore più grande quando x attraversa tutti i vettori con . È il valore singolare più grande di . Nel caso di una matrice simmetrica, è anche il valore assoluto più grande dei suoi autovettori, e quindi uguale al suo raggio spettrale.
Numero di condizione
Il numero di condizione di una matrice non singolare è definito come . Nel caso di una matrice simmetrica, è il valore assoluto del quoziente tra l'autovalore maggiore e quello minore. Matrici con numeri di condizione elevati possono causare risultati numericamente instabili: piccole perturbazioni possono causare grandi errori. Le matrici di Hilbert sono le matrici mal condizionate più famose. Ad esempio, la matrice di Hilbert del quarto ordine ha una condizione pari a 15514, mentre per l'ordine 8 è 2,7 × 10 8 .
Rango
Una matrice ha rango se ha colonne linearmente indipendenti, mentre le restanti colonne sono linearmente dipendenti da queste. Equivalentemente, è la dimensione dell'intervallo di  . Inoltre è il numero di valori singolari diversi da zero.
Nel caso di una matrice simmetrica, r è il numero di autovalori diversi da zero. Sfortunatamente, a causa di errori di arrotondamento, le approssimazioni numeriche di autovalori nulli potrebbero non essere zero (può anche succedere che un'approssimazione numerica sia nulla, mentre il valore reale non sia effettivamente 0). Pertanto è possibile calcolare il rango numerico solo decidendo quali autovalori sono sufficientemente vicini a zero.
Pseudo-inversa della matrice
La pseudo-inversa di una matrice è la matrice unica per cui E sono simmetriche e per cui la condizione è verificata.
Se non è singolare, quindi .
Quando viene chiamata la procedura jacobi(S, e, E), allora la relazione vale dove Diag(e) denota la matrice diagonale con il vettore e sulla diagonale. Si definisce con il vettore dove è sostituito da se , e da 0 se è (numericamente vicino a) zero. Poiché la matrice E è ortogonale, ne consegue che la pseudo-inversa di S è data da .
Soluzione dei minimi quadrati
Se matrice non ha rango completo, potrebbe non esserci una soluzione del sistema lineare . Tuttavia, si può cercare un vettore x per il quale è minimo. La soluzione è . Nel caso di una matrice simmetrica S come prima, si ha .
Matrice esponenziale
Da si trova dove exp  è il vettore dove è sostituito da . Allo stesso modo, può essere calcolato in modo ovvio per qualsiasi funzione (analitica) .
Equazioni differenziali lineari
L'equazione differenziale ha la soluzione . Per una matrice simmetrica , ne consegue che . Se è l'espansione di dagli autovettori di , Poi .
Permettere essere lo spazio vettoriale attraversato dagli autovettori di che corrispondono ad un autovalore negativo e analogamente per gli autovalori positivi. Se Poi  ; cioè, il punto di equilibrio 0 è attrattivo . Se Poi  ; cioè, 0 è ripugnante . E sono chiamate varietà stabili e instabili per . Se ha componenti in entrambe le varietà, quindi un componente viene attratto e l'altro viene respinto. Quindi approcci COME .

Note[modifica | modifica wikitesto]

  1. ^ (DE) vol. 1846, 1846, DOI:10.1515/crll.1846.30.51, http://gdz.sub.uni-goettingen.de/dms/load/img/?PID=GDZPPN002144522.
  2. ^ vol. 123, 2000, DOI:10.1016/S0377-0427(00)00413-1, https://oadoi.org/10.1016/S0377-0427(00)00413-1.
  3. ^ (DE) vol. 6, 1964, DOI:10.1007/BF01386091, MR 174171, https://oadoi.org/10.1007/BF01386091.