36
Metodi iterativi su spazi di Krylov G. Puppo

Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Embed Size (px)

Citation preview

Page 1: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Metodi iterativi su spazi di Krylov

G. Puppo

Page 2: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Riassunto

• Metodo Ortomin

• Metodo del gradiente

• Metodo del gradiente coniugato

• Metodo GMRES

• Metodo GMRES con restart

Page 3: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Metodo Ortomin

Questo metodo è definito dalla ricorsione:

Page 4: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Il metodo Ortomin si basa sulla minimizzazione del residuo lungo la direzione Ar

k

function [xnew,residuo,nit]=ortomin(a,b,tol)% X=ORTOMIN(A,B,TOL): Calcola la soluzione X del sistema% A*X=B, usando il metodo iterativo Ortomin% con tolleranza TOL sul test di arresto% se TOL viene omessa, sceglie TOL=100*eps% [X,RESIDUO,NIT]=ORTOMIN(A,B,TOL) Calcola la soluzione % X del sistema% A*X=B, il residuo e il numero NIT di iterazioni eseguite

if nargin < 3 tol = eps*100;end% Usa B come stima iniziale X0xold = b; normb=norm(b);

Page 5: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

% Stima un tetto al numero massimo di iterazioninmax=length(b)^2; for n = 1:nmax res = b-a*xold; ares=a*res; alpha = (res'*ares) / (ares'*ares); xnew = xold + alpha*res; % Test di arresto res=norm(res); residuo(n)=res; if res <= tol*normb nit=n; return else xold = xnew; endendnit=nmax; display('non converge')

Page 6: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Membrana elastica

Il numero di iterazioni sale come N 2

Page 7: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Convezione-diffusione

Ortomin converge anche per una matrice di convezione-diffusione, con numeri di Peclet maggiori di 1

Page 8: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Ortomin converge per il problema di convezione diffusione, perchè le 4 matrici dell'esempio precedente hanno un campo di valori che non contiene lo zero

Page 9: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Per calcolare il campo di valori di una matrice ho usato questa function:

function valori(a,n,colore)% Calcola il campo di valori di A usando N vettori di norma 1% e disegna il grafico[m1,m2]=size(a);stringa=strcat(colore,'o');for k=1:n x1=rand(m2,1); x2=rand(m2,1); x=x1+i*x2; x=x/norm(x); v(k)=x'*(a*x);endplot(v,stringa,'Markersize',5,'Markerfacecolor',colore)

Page 10: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Esercizi

Calcolare la velocità di convergenza per Ortomin, tenendo fisso il numero di Peclet, e variando N: N=10, 20, 40, 80.

Calcolare il campo di valori della matrice della membrana elastica, per N=10, 20, 40, 80.

Page 11: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Metodo del gradiente

Il metodo del gradiente è definito dalla seguente ricorsione:

Page 12: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Il metodo del gradiente si basa sulla minimizzazione dell'errore in norma A lungo la direzione Ar

k. Converge per matrici

simmetriche e definite positive

function [xnew,residuo,nit]=gradiente(a,b,tol)% X=GRADIENTE(A,B,TOL): Calcola la soluzione X del sistema% A*X=B, usando il metodo iterativo del gradiente% con tolleranza TOL sul test di arresto% se TOL viene omessa, sceglie TOL=100*eps% [X,RESIDUO,NIT]=GRADIENTE(A,B,TOL) Calcola % la soluzione X del sistema% A*X=B, il residuo e il numero NIT di iterazioni eseguiteif nargin < 3 tol = eps*100;end% Usa B come stima iniziale X0xold = b; normb=norm(b);

Page 13: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

% Stima un tetto al numero massimo di iterazioninmax=length(b)^4; for n = 1:nmax res = b-a*xold; ares=a*res; alpha = (res'*res) / (res'*ares); xnew = xold + alpha*res; % Test di arresto res=norm(res); residuo(n)=res; if res <= tol*normb nit=n; return else xold = xnew; endendnit=nmax; display('non converge')

Page 14: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Membrana elastica

Il metodo del gradiente converge per la matrice del Laplaciano

Page 15: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Convezione-diffusione

La matrice di convezione-diffusione non è SPD: la convergenza del metodo del gradiente non è garantita

Page 16: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Metodo del gradiente coniugato

Il metodo del gradiente coniugato è definito da:

Page 17: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Il metodo del gradiente coniugato si basa sulla minimizzazione dell'errore in norma A lungo la direzione Ap

k. Converge per

matrici simmetriche e definite positive

function [xnew,residuo,nit]=grad_con(a,b,tol)% X=GRAD_CON(A,B,TOL): Calcola la soluzione X del sistema% A*X=B, usando il metodo iterativo del gradiente coniugato% con tolleranza TOL sul test di arresto% se TOL viene omessa, sceglie TOL=100*eps% [X,RESIDUO,NIT]=GRAD_CON(A,B,TOL) Calcola la % soluzione X del sistema% A*X=B, il residuo e il numero NIT di iterazioni eseguite

if nargin < 3 tol = eps*100;end

Page 18: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

% Usa b come stima iniziale X0xold = b; normb=norm(b);% Stima un tetto al numero massimo di iterazioninmax=length(b)^2; rk = b-a*xold; norm_rk=norm(rk); pk=rk;for n = 1:nmax apk=a*pk; alpha = norm_rk^2 / (pk'*apk); xnew = xold + alpha*pk; rk=rk-alpha*apk; % Test di arresto res=norm(rk); % Norma del nuovo residuo ....... bk=res^2 / norm_rk^2; pk=rk+bk*pk; norm_rk=res;endnit=nmax; display('non converge')

Page 19: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Membrana elastica

Il metodo del gradiente coniugato converge per la matrice del Laplaciano, il numero di iterazioni cresce come N.

Page 20: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Convezione diffusione

Il metodo del gradiente coniugato non converge per la matrice di convezione diffusione, nemmeno per numeri di Peclet piccoli.

Page 21: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Esercizi

Confrontare i tempi di calcolo per il metodo del gradiente coniugato e del gradiente per il problema della membrana elastica, per N=10, 20, 40 , 80.

Applicare il metodo del gradiente coniugato al problema della trave elastica e stimare l'andamento del numero di iterazioni rispetto ad N.

Page 22: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Algoritmo di Arnoldi

Il metodo di Arnoldi serve a costruire una base ortogonale per lo spazio di Krilov generato dalla matrice A, a partire da un vettore r

0.

Page 23: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

function [q,h]=arnoldi(a,b,n)% crea N vettori ortogonali per lo spazio di Krilov generato % da A, con stima iniziale Br0=b-a*b; p=r0/norm(r0);% Inizializza la costruzione della matrice ortogonale Q:q(:,1)=p;for k=1:n qtilde=a*q(:,k); for j=1:k h(j,k)=qtilde'*q(:,j); qtilde=qtilde-h(j,k)*q(:,j); end h(k+1,k)=norm(qtilde); q(:,k+1)=1/h(k+1,k)*qtilde;end

Page 24: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Questo algoritmo crea una matrice ortogonale Q con N+1 colonne e con lo stesso numero di righe di A e una matrice H (N+1) per N di Hessenberg. Applico la function arnoldi.m alla matrice del Laplaciano, con N punti interni per lato:

H =

Page 25: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Esercizio

Verificare che: AQ(:, 1:N) = Q*H e che Q è una matrice ortogonale, cioè: Q*Q' = I.

Page 26: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Metodo GMRES

Questo metodo è basato sulla costruzione di una base ortogonale per lo spazio di Krilov generato dalla matrice A

Page 27: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

function [xnew,residuo,nit]=gmres_full(a,b,tol)% X=GMRES_FULL(A,B,TOL): Calcola la soluzione X del sistema% A*X=B, usando il metodo iterativo GMRES% con tolleranza TOL sul test di arresto% se TOL viene omessa, sceglie TOL=100*eps% [X,RESIDUO,NIT]=GMRES_FULL(A,B,TOL) Calcola % la soluzione X del sistema% A*X=B, il residuo e il numero NIT di iterazioni eseguite

if nargin < 3 tol = eps*100;end% Usa B come stima iniziale X0xold = b; normb=norm(b);% Stima un tetto al numero massimo di iterazioninmax=length(b);

Page 28: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

r0 = b-a*xold; norm_rk=norm(r0); q(:,1)=r0/norm_rk;for k = 1:nmax qtilde=a*q(:,k); for j=1:k h(j,k)=qtilde'*q(:,j); qtilde=qtilde-h(j,k)*q(:,j); end h(k+1,k)=norm(qtilde); q(:,k+1)=1/h(k+1,k)*qtilde; % Trova la soluzione ai minimi quadrati di Hy=q'*r0 yk=h\(q'*r0); y=q(:,1:k)*yk; xnew = b + y; rk=b-a*xnew; % Test di arresto ........... endnit=nmax; display('non converge')

Page 29: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Membrana elastica

Per il problema della membrana elastica, il metodo del gradiente coniugato e GMRES richiedono approssimativamente lo stesso numero di iterazioni

Page 30: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Convezione diffusione

Per il problema di convezione, GMRES converge, anche per numeri di Peclet>1, mentre il gradiente coniugato diverge.

Page 31: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

GMRES con restart

Le iterazioni del metodo GMRES diventano più lente ad ogni iterazione, perchè ogni volta aumentano le dimensioni della matrice Q e di conseguenza aumentano le dimensioni del sistema ai minimi quadrati da risolvere ad ogni iterazione.

Nel metodo GMRES con restart, si applica il metodo GMRES per un numero fisso js di iterazioni, con js piccolo. Terminate le js iterazioni, si ri-inizializza il metodo, usando come valore iniziale il residuo appena calcolato

Page 32: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

function [xnew,residuo,nit]=gmres_restart(a,b,js,tol)% X=GMRES_RESTART(A,B,JS,TOL): Calcola la soluzione X del sistema% A*X=B, usando il metodo iterativo GMRES con restart ogni % JS iterazioni e con tolleranza TOL sul test di arresto% se TOL viene omessa, sceglie TOL=100*eps% [X,RESIDUO,NIT]=GMRES_RESTART(A,B,JS,TOL) Calcola la soluzione X del sistema% A*X=B, il residuo e il numero NIT di iterazioni eseguiteif nargin < 4 tol = eps*100;end% Usa B come stima iniziale X0xold = b; normb=norm(b);% Stima un tetto al numero massimo di iterazioninmax=length(b)^2;

Page 33: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

r0 = b-a*xold; norm_rk=norm(r0); q(:,1)=r0/norm_rk;for k = 1:nmax for jk=1:js qtilde=a*q(:,jk); for j=1:jk h(j,jk)=qtilde'*q(:,j); qtilde=qtilde-h(j,jk)*q(:,j); end h(jk+1,jk)=norm(qtilde); q(:,jk+1)=1/h(jk+1,jk)*qtilde; % Trova la soluzione ai minimi quadrati di Hy=q'*r0 yk=h\(q'*r0); y=q(:,1:jk)*yk; xnew = xold + y; end

Page 34: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

% Prepara i valori di ingresso per il restart xold=xnew; rk=b-a*xnew; r0=rk; clear q h, q(:,1)=r0/norm_rk; % Test di arresto res=norm(rk); % Norma del nuovo residuo residuo(k)=res; diff = norm(xnew-xold); if res <= tol*normb %| diff<=tol*norm(xold) nit=k; return else xold = xnew; endendnit=nmax; display('non converge')

Page 35: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Convezione-diffusione

In questo test, N=40 e Peclet =2.Come si vede il metodo GMRES con restart dopo 2 iterazioni ha una velocità di convergenza comparabile con full GMRES

Page 36: Metodi iterativi su spazi di Krylov G. Puppo. Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con

Esercizi

Calcolare i tempi di CPU per GMRES con restart per diversi valori di js e paragonare con full GMRES.

Paragonare i tempi di calcolo sul problema della membrana elastica per il metodo del gradiente coniugato e GMRES con restart, per valori piccoli di js.