Calcolo numerico/Metodo della potenza

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

Autovalore di modulo massimo

Supponiamo che l'autovalore di modulo massimo |λ1| sia strettamente maggiore dell'autovalore successivo, cioè

|λ1|>|λ2|≥|λ3|≥…≥|λn|

si esclude quindi il caso in cui λ1 è un autovalore complesso (e avrebbe modulo uguale a quello del suo coniugato) o in cui λ1 ha molteplicità maggiore di 1 (non sarebbe strettamente maggiore di se stesso).

Supponiamo che esistano 𝒙1,…,𝒙n autovettori linearmente indipendenti, che formano una base.

Consideriamo un vettore

𝒛0=∑j=1nαj𝒙j,rappresentazione ∘

rappresentato nella base degli autovettori. Richiedo che nella scrittura di 𝒛0 ci sia un contributo dell'autovettore 𝒙1 relativo all'autovalore λ1, cioè α1≠0.

Genero una successione di vettori 𝒛1,…,𝒛k tali che

𝒛k=A∗𝒛k−1=Ak∗𝒛0 da cui metodo della potenza

Allora sostituendo 𝒛0 la rappresentazione ∘ ottengo:

𝒛k=Ak[∑j=1nαj𝒙j]

e siccome gli 𝒙j sono autovettori possiamo scrivere:

𝒛k=∑j=1nλjkαj𝒙j

𝒛k=λ1kα1𝒙1+∑j=2nλjkαj𝒙j

e raccogliendo λ1k:

𝒛k=λ1k[α1𝒙1+∑j=2n(λjλ1)kαj𝒙j],rappresentazione ♡

λj<λ1⟶(λjλ1)k→0⟺k→∞, allora per k→∞, 𝒛k∥𝒙1.

Definisco il quoziente di Rayleigh:

σk=𝒛kh∗A∗𝒛k𝒛kh𝒛k

Verifichiamo che σk→λ1. Sostituisco l'espressione ♡ di 𝒛k nel σk che abbiamo definito:

σk=[λ¯1k(α¯1𝒙1h+∑j=2n(λjλ1)¯kα¯j𝒙jh]∗A∗[λ1k(𝒙1α1+∑j=2n(λjλ1)kαj𝒙j][λ¯1k(α¯1𝒙1h+∑j=2n(λjλ1)¯kα¯j𝒙jh]∗[λ1k(α1𝒙1+∑j=2n(λjλ1)kαj𝒙j]

Per k→∞ i termini (λjλ1)k→0, mentre i termini λ¯1k∗λ1k si semplificano e rimane:

limk→∞σk=

=α¯1α1𝒙1hA𝒙1α¯1α1𝒙1h𝒙1

=𝒙1hλ1𝒙1𝒙1h𝒙1=λ1

Sul calcolatore il problema compare nella divisione per 𝒙kh𝒙k=|𝒙k|, perché si rischia di andare nella barriera di overflow o di underflow. Per risolvere il problema, invece di considerare 𝒛k, lo si normalizza in norma 2 cioè si considera:

𝒚k=𝒛k|𝒛k|

e in questo modo nel quoziente di Rayleigh si divide per un vettore di norma 1.

Implementazione dell'algoritmo

Dato 𝒛0, eseguo le seguenti operazioni:

𝒚k=𝒛k|𝒛k|

𝒛k+1=A𝒚k

σ=𝒚kh𝒛k+1

e se una certa condizione imposta nel test d'arresto non è verificata, si procede.

Il costo è dato da n2 operazioni del prodotto matrice-vettore, e 3n operazioni per i prodotti scalari nelle norme.

σk=λ1∗(1+O(λ2λ1)k)), cioè la velocità con cui σk converge a λ1 è come il rapporto tra λ2λ1, e se i due autovalori sono ben separati il metodo converge rapidamente.

Il metodo converge anche se l'autovalore di modulo massimo non ha molteplicità algebrica uguale a 1, in particolare:

  1. λ1=λ2. I due (o r) autovalori dominanti sono coincidenti. In questo caso il metodo risulta ancora convergente, ma xk converge a un vettore nel sottospazio generato da x1e x2;
  2. λ1=−λ2. I due autovalori dominanti sono opposti. In questo caso l'autovalore di modulo massimo può essere approssimato applicando il metodo delle potenze alla matrice A2, in modo che λ12=λ22 e l'analisi ricada nel punto precedente;
  3. i due autovalori dominanti sono complessi coniugati. In questo caso si hanno delle oscillazioni non smorzate nella sequenza dei vettori xk e il metodo delle potenze non converge.

α1≠0 non è un'ipotesi essenziale se si lavora in aritmetica floating point.

Test di arresto

Test dell'incremento: richiediamo che

|σk−σk−1|<ε

e il metodo prosegue fino a quando questa condizione non è verificata.

Nel caso in cui A è una matrice normale, cioè AAh=AhA, possiamo considerare altri due test d'arresto.

Proposizione 3.1

Supponiamo di avere A∈ℂn,n normale, consideriamo 𝒙∈ℂn∖0, e f razionale definita su un sottoinsieme del piano complesso che contiene tutti gli autovalori di A. Allora esiste λ∈A tale che

|f(λ)|≤|f(A)𝒙|2|𝒙|2

Test 1: Impongo la condizione

|𝒛k+1−σk𝒚k|≤ε

che permette di avere un controllo sull'errore assoluto.

Infatti, se scegliamo la funzione f(λ)=λ−σk (errore assoluto) e 𝒙=𝒚k, allora, per la proposizione:

|f(λ)|=|λ−σk|≤|(A−σkI)𝒚k||𝒚k|2

|𝒚k|=1 per costruzione, allora

|λ−σk|≤|A∗𝒚k−σkI𝒚k|=|𝒛k+1−σk𝒚k|

Test 2: se A è normale e non singolare, allora la condizione

|𝒛k+1−σk𝒚k|2|𝒛k+1|≤ε

permette di controllare l'errore relativo.

Scegliamo f(λ)=λ−σkλ (errore relativo), e poniamo 𝒙=𝒛k+1, applichiamo poi la proposizione:

|λ−σk|λ≤|(A−σkI)A−1𝒛k+1|2|𝒛k+1|

=|𝒛k+1−σkA−1𝒛k+1||𝒛k+1|2

=|𝒛k+1−σk𝒚k||𝒛k+1|2

Template:Avanzamento