Calcolo numerico/Principali metodi iterativi

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

Metodo di Jacobi

Dividiamo A in tre matrici D+L+U, dove D è la matrice diagonale, L la triangolare inferiore stretta (con 0 sulla diagonale principale), U triangolare superiore stretta.

Nel caso del metodo di Jacobi A=M−N con M=D e N=−(L+U) (N è uguale ad A con zeri sulla diagonale principale).

A𝒙=(M−N)𝒙=𝒃

⟶𝒙=M−1N𝒙+M−1𝒃

A=M−1N,𝒄=M−1𝒃

e tenendo conto delle espressioni di M e N:

P=−D−1(L+U),𝒄=D−1𝒃

Indicando con Pj la matrice d'iterazione del metodo di Jacobi si ha:

𝒙k=Pj𝒙k−1+𝒄j

e moltiplicando per D:

D𝒙k=DPj𝒙k−1+D𝒄j

e sostituendo le espressioni ricavate prima:

D𝒙k=−(L+U)𝒙k−1+𝒃

Considerando la i-esima equazione si ha:

xi=−∑j≠iAijxj(k−1)+biAii

Metodo di Gauss-Seidel

In questo caso si pone M=D+L, invece N=−U, e si ricava:

P=−(D+L)−1U,𝒄=(D+L)−1𝒃

Come prima, moltiplichiamo per M la relazione

𝒙k=P𝒙k−1+𝒃

e otteniamo

(D+L)𝒙k=−U𝒙k−1+𝒃

cioè

D𝒙k=−L𝒙k−U𝒙k−1+𝒃

Considerando l'equazione i-esima,

xi(k)=−∑j<iAijxj(k)−∑j>iAijxj(k−1)Aii

Teniamo conto che nel prodotto con la triangolare inferiore si utilizzano le informazioni già aggiornate al passo k-esimo, e sopravvivono solo gli elementi con colonne di indice minori di i. Nell'altro prodotto invece si utilizzano le informazioni ricavate al passo k−1.

Matrici diagonalmente dominanti e irriducibili

Template:Definizione

Template:Definizione

Se A,B sono come sopra, dato il sistema lineare

B𝒙=𝒃

esso si può riscrivere come:

(A11A120A22)×(x1x2)=(b1b2)

allora si ottengono le equazioni

{A11x1+A12x2=b1A22x2=b2

e risolvendo prima la seconda e sostituendo poi x2 nella prima otteniamo un sistema disaccoppiato.

Esempio 2.11

Consideriamo le matrici

13002−1002

Associamo questa matrice di ordine n=3 a un grafo con tre nodi 1,2,3. Per ogni entrata della matrice, quando Aij≠0 collego il nodo i con il nodo j con un arco orientato da i a j. Ad esempio, Aii=1 quindi traccio un arco che entra ed esce nel nodo 1. Nel caso di questa matrice, possiamo andare dal nodo 1 al 2 seguendo l'arco orientato tracciato in corrispondenza di A12=3, possiamo andare dal nodo 2 al 3 lungo l'arco tracciato in corrispondenza di A23=−1, ma non possiamo andare in nessun modo dal nodo 3 all'1 perché A31=0.

Consideriamo invece la matrice

13002−1−102

Nel caso della seconda matrice, c'è un cammino chiuso che connette tutti i nodi.

Teorema 2.14

Una matrice A è irriducibile se e solo se il grafo associato è fortemente connesso ovvero se e solo se esiste un cammino dal nodo i al nodo j per ogni coppia di nodi i,j.

Quindi la prima matrice è riducibile e la seconda non lo è.

Condizioni sufficienti di convergenza

Le condizioni sufficienti per la convergenza del metodo di Jacobi sono le seguenti:

1. A è diagonalmente dominante in senso stretto (per righe o colonne)

Dim. Sappiamo che

|A|∞=maxi=1n[∑j=1n|Aij|]

Nel metodo di Jacobi la matrice di permutazione è

P=M−1N=−D−1(L+U)

Se calcolo la norma infinito della matrice di Jacobi Pj, si ha:

|P|≤|D−1|∗|L+U|

Sfruttando il fatto che A è diagonalmente dominante in senso stretto sulle righe, si ha:

|L+U|≤maxi|Aii|

(infatti la somma di ogni riga privata dell'elemento diagonale è minore dell'elemento diagonale)

|D−1|=1maxi|Aii|

quindi

|P|≤1maxi|Aii|∗maxi|Aii|≤1

ρ(P)<1 e il metodo converge.

2. A è diagonalmente dominante in senso debole (per righe o per colonne)

3. A è irriducibile.

Nelle stesse ipotesi converge anche il metodo di Gauss-Seidel, però per questo metodo vale anche la seguente proposizione:

Proposizione 2.5

Data una matrice A m×n hermitiana, non singolare il metodo di Gauss-Seidel converge se e solo se A è definita positiva (la fattorizzazione di Cholesky, che determina se una matrice è definita positiva oppure no, è un buon modo per determinare se il metodo di Gauss-Seidel converge o no).

Teorema 2.15

Sia A∈ℂn,n tridiagonale, siano

𝒂=(a1,…,an) diagonale principale

𝒄=(c1,…,cn−1) sopradiagonale

𝒃=(b2,…,bn) sottodiagonale

Se λ è un autovalore della matrice di iterazione di Jacobi, allora λ2 è un autovalore per Pg (matrice di iterazione di Gauss-Seidel). Inoltre, se λ≠0 è un autovalore di Pg, allora ±λ è un autovalore di Pj.

Allora per le matrici tridiagonali, ρ(Pg)=ρ(Pj)2, allora Gauss-Seidel è convergente se e solo se Jacobi è convergente. Inoltre se Gauss-Seidel converge, ha un tasso di convergenza del doppio rispetto a Jacobi, infatti il tasso asintotico di convergenza è log⁡ρ(P) e si ha

ρ(Pg)ρ(Pj)=log⁡ρ(Pj)log⁡ρ(Pj)2=1/2

(tuttavia non è detto che sia sempre più conveniente usare Gauss-Seidel).

Tasso di convergenza

Consideriamo la relazione:

|Ek|≤|Pk|∗|Ek−1|

Allora valgono le seguenti definizioni

fattore di convergenza=|Pk|fattore di convergenza medio=|Pk|1/ktasso di convergenza medioRk(P)=−1/klog⁡|Pk|tasso asintotico di convergenzaR(P)=limk→∞rk(P)=log⁡ρ(P)

La definizione di tasso asintotico di convergenza non dipende né dalla norma né dal passo.

Test d'arresto test dell'incremento

Si considera la differenza fra un'iterata e la successiva, misurata con una certa norma, e si richiede che il metodo si arresti quando è verificata la condizione

|𝒙k−𝒙k−1|≤ε

dove ε è una tolleranza assegnata.

Ek=|𝒙∗−𝒙k|

⟶|𝒙k−𝒙k−1|=|𝒙k−𝒙∗|+|𝒙∗−𝒙k−1|≤Ek+Ek−1

=Ek−1+P∗Ek−1=(I+P)∗Ek−1

Quindi

𝒙k−𝒙k−1≤(I+P)Ek−1

⟶Ek−1=(I+P)−1(𝒙k−𝒙k−1)

Passando alla norma:

|Ek−1|≤|(I+P)−1|∗|𝒙k−𝒙k−1|relazione ∗

Applichiamo il teorema: se |A|<1 con norma matriciale indotta, allora I+A è non singolare e

|(I+A)−1|≤11−|A|

Allora, sostituendo l'espressione trovata per |(I+P)−1| nella relazione ∗ ottengo:

|Ek−1|≤11−|P|∗|𝒙k−𝒙k−1|

Quindi

|Ek|=|PEk−1|≤|P|∗|Ek−1|

=|P|1−|P||𝒙k−𝒙k−1|

Il test è affidabile tranne nel caso in cui |P|≃1.

Test d'arresto Test del residuo

Il residuo è la quantità 𝒃−A𝒙. Si definisce il residuo al passo k come 𝒃−A𝒙k. Scelta una norma, si impone che la norma del residuo sia minore di ε, e il metodo si arresta quando questa condizione è verificata.

Sapendo che

A𝒙∗=𝒃

allora

Rk=𝒃−A𝒙k=A∗(𝒙∗−𝒙k)=A∗Ekequazione dell'errore

allora

Ek=A−1Rk

|Ek|=|A−1Rk|≤|A−1|∗|Rk|

=K(A)|A|∗|Rk|

Allora l'errore assoluto è controllato bene dal residuo, se il numero di condizionamento non è molto grande.

Il test del residuo è affidabile se il problema non è malcondizionato.

Se invece vogliamo stimare l'errore relativo:

|Ek||𝒙∗|

≤|A−1|∗|Rk||𝒙∗|

Allora, osserviamo che:

|𝒃|≤|A|∗|𝒙∗|

⟶1|𝒙∗|≤|A||𝒃|

allora

|Ek||𝒙∗|≤|A−1|∗|A|∗|Rk||𝒃|

=K(A)∗|Rk||𝒃|

La quantità |Rk||𝒃| viene chiamata residuo relativo, se supponiamo r0=𝒃 se 𝒙0=0. L'errore relativo viene controllato dal residuo relativo a meno di condizionamento.

Il costo computazionale dell'iterazione è o(n2) operazioni per iterazione, mentre se la matrice è sparsa il costo è o(n).

Template:Avanzamento