Algoritmo degli autovalori di Jacobi

Da testwiki.
Versione del 2 lug 2024 alle 12:37 di imported>Winfriedi (growthexperiments-addlink-summary-summary:3|0|0)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

Template:O In algebra lineare, lTemplate:'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

Sia S una matrice simmetrica e G=G(i,j,θ) una matrice di rotazione di Givens. Si dimostra che la matrice

S=GSG

è simmetrica e simile a S .

Inoltre, S ha i seguenti valori:

S'ii=c2Sii2scSij+s2SjjS'jj=s2Sii+2scSij+c2SjjS'ij=S'ji=(c2s2)Sij+sc(SiiSjj)S'ik=S'ki=cSiksSjkki,jS'jk=S'kj=sSik+cSjkki,jS'kl=Sklk,li,j

dove s=sin(θ) e c=cos(θ).

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

S'ij=cos(2θ)Sij+12sin(2θ)(SiiSjj)

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

tan(2θ)=2SijSjjSii

Se Sjj=Sii, allora

θ=π4

Per ottimizzare questo effetto, Sij 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

Se p=Skl è un elemento pivot, allora per definizione |Sij||p| per 1i,jn,ij .

Si definisce Γ(S)2 come la somma dei quadrati di tutti gli elementi fuori diagonale di S . Essendo che S ha esattamente 2N:=n(n1) elementi fuori diagonale, si ha che p2Γ(S)22Np2 O 2p2Γ(S)2/N .

Di conseguenza Γ(SJ)2=Γ(S)22p2 . Questo implica Γ(SJ)2(11/N)Γ(S)2 oppure Γ(SJ)(11/N)1/2Γ(S); in altre parole, la sequenza delle rotazioni di Jacobi converge almeno linearmente di un fattore (11/N)1/2 ad una matrice diagonale.

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

Γ(Sσ)(11N)N/2Γ(S) ;

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

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

NS:=n(n1)2μ=1m12νμ(νμ1)N

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

Γ(Ss)n21(γ2d2γ),γ:=Γ(S) .

Quindi la convergenza diventa quadratica non appena Γ(S)<d2+n21

Costo

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 ≈ Template:Sfrac n 2 elementi fuori diagonale. Possiamo ridurre anche questo procedimento alla complessità O(n) se introduciamo un array di indici aggiuntivo m1,,mn1, con la proprietà che mi è 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 (i,mi).

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 mi non è né kl, è sufficiente confrontare il vecchio massimo in mi con i nuovi elementi, aggiornando mi se necessario. Se mi 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 mi 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 NS<N .

Algoritmo

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 ei è un autovalore e ogni colonna Ei un autovettore ortonormale per ei, io = 1, ..., n .

Appunti

1. L'array logico changed mantiene lo stato di ciascun autovalore. Se il valore numerico di ek o el 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 e1,...,en 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

Sia S=(4306035303006754206067516201050354201050700)

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

e1=2585.25381092892231

E1=(0.02919332316478605880.3287120557631889970.7914111458331263310.514552749997152907)

e2=37.1014913651276582

E2=(0.1791862905354548260.7419177906284534350.1002281369471921990.638282528193614892)

e3=1.4780548447781369

E3=(0.5820756994972376500.3705021850670930580.5095786345017996260.514048272222164294)

e4=0.1666428611718905

E4=(0.7926082911637635850.4519231209015997940.3224163985818249920.252161169688241933)

Applicazioni per matrici reali simmetriche

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). A sono le radici quadrate degli autovalori (non negativi) di ATA . Nel caso di una matrice simmetrica S si ha che STS=S2, quindi i valori singolari di S sono i valori assoluti degli autovalori di S.
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 Ax2 quando x attraversa tutti i vettori con x2=1 . È il valore singolare più grande di A . 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 A è definito come cond(A)=A2A12 . 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 A ha rango r se ha r colonne linearmente indipendenti, mentre le restanti colonne sono linearmente dipendenti da queste. Equivalentemente, r è la dimensione dell'intervallo di A . 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 A è la matrice unica X=A+ per cui AX E XA sono simmetriche e per cui la condizioneAXA=A,XAX=X è verificata.
Se A non è singolare, quindi A+=A1 .
Quando viene chiamata la procedura jacobi(S, e, E), allora la relazione S=ETDiag(e)E vale dove Diag(e) denota la matrice diagonale con il vettore e sulla diagonale. Si definisce con e+ il vettore dove ei è sostituito da 1/ei se ei0, e da 0 se ei è (numericamente vicino a) zero. Poiché la matrice E è ortogonale, ne consegue che la pseudo-inversa di S è data da S+=ETDiag(e+)E .
Soluzione dei minimi quadrati
Se matrice A non ha rango completo, potrebbe non esserci una soluzione del sistema lineare Ax=b . Tuttavia, si può cercare un vettore x per il quale Axb2 è minimo. La soluzione è x=A+b . Nel caso di una matrice simmetrica S come prima, si ha x=S+b=ETDiag(e+)Eb .
Matrice esponenziale
Da S=ETDiag(e)E si trova expS=ETDiag(expe)E dove exp e è il vettore dove ei è sostituito da expei . Allo stesso modo, f(S) può essere calcolato in modo ovvio per qualsiasi funzione (analitica) f .
Equazioni differenziali lineari
L'equazione differenziale x=Ax,x(0)=a ha la soluzione x(t)=exp(tA) . Per una matrice simmetrica S, ne consegue che x(t)=ETDiag(expte)Ea . Se a=i=1naiEi è l'espansione di a dagli autovettori di S, Poi x(t)=i=1naiexp(tei)Ei .
Permettere Ws essere lo spazio vettoriale attraversato dagli autovettori di S che corrispondono ad un autovalore negativo e Wu analogamente per gli autovalori positivi. Se aWs Poi limtx(t)=0 ; cioè, il punto di equilibrio 0 è attrattivo x(t) . Se aWu Poi limtx(t)= ; cioè, 0 è ripugnante x(t) . Ws E Wu sono chiamate varietà stabili e instabili per S . Se a ha componenti in entrambe le varietà, quindi un componente viene attratto e l'altro viene respinto. Quindi x(t) approcci Wu COME t .

Note