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

Slides:



Advertisements
Presentazioni simili
Equazioni non lineari Gabriella Puppo.
Advertisements

1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Metodi numerici in Matlab
Programma: main() { istruzioni } ; assegnazione condizione ciclo istruzione: ;
Lez 4 (11/12)Elementi di Programmazione1 Istruzioni per il controllo del Flusso 2.
Lez 4 (10/11)Elementi di Programmazione1 Istruzioni per il controllo del Flusso 2.
Lez 4 (10/11)Elementi di Programmazione1 Istruzioni per il controllo del Recupero lez.4.
Analisi Numerica: AutoValori e Autovettori
Esercitazione MATLAB (13/5)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Algoritmi e Strutture Dati con Laboratorio (Modulo I)
E(’)= Riassumendo: ipotesi per OLS Modello lineare
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
Ottimizzazione non lineare non vincolata: Metodi iterativi di eliminazione ed interpolazione per ottimizzazione di funzione di una variabile maggio '11.
Interpolazione polinomiale a tratti
Equazioni differenziali
Metodi iterativi G. Puppo.
Algebra lineare G. Puppo.
Esercizi di riepilogo Gabriella Puppo.
Soluzione FEM di problemi parabolici
Interpolazione polinomiale
Metodi iterativi semplici G. Puppo. Riassunto Problema del fill-in Memorizzazione di matrici sparse Metodo di Jacobi.
FEM -2 Gabriella Puppo.
Metodi FEM per problemi ellittici lineari a tratti Gabriella Puppo.
Metodi TVD ad alta risoluzione
Metodi FEM in 2D G. Puppo.
Metodi numerici per equazioni lineari iperboliche Gabriella Puppo.
FEM -3 G. Puppo.
Metodi conservativi per equazioni iperboliche
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Ordinamento di una lista: bubble-sort
Il calcolo del fattoriale
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
EQUAZIONI CONCATENATE DI ALLIEVI
Studente Claudia Puzzo
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
Selezione (=scelta) con “if-else”
Istruzioni Iterative Nicola Fanizzi
1 5 a -6 a lezione di laboratorio Laurea Specialistica in Ingegneria MATEMATICA Laurea Specialistica in Ingegneria MATEMATICA a.a
Esercitazione 2 – Generazione di variabili Matlab.
Il calcolo di radiosity
Cinetica Chimica Applicata
Analisi dell’output di una simulazione
Elementi di Informatica di base
“Piano” Lab 1 – Fattorizzazione LU + pivoting
Strutture dati per insiemi disgiunti
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Si vuole che lesecutore coniughi non solo il presente indicativo ma anche limperfetto e il passato remoto Acquisisci tempo presente imperfetto passato.
Metodi matematici per economia e finanza. Prof. F. Gozzi a.a. 2009/10
Introduzione ai Metodi Inversi
Laboratorio di Neuroingegneria
Laureando: Enrico Masini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
ESERCIZI.
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Complessità di un algoritmo
Algoritmi online Maria Simi, a.a. 2007/08 Problemi di esplorazione  Gli agenti per il problem-solving assumono:  ambienti deterministici e osservabili.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Allievi Elettrici - AA Le funzioni ricorsive in C
Lez 4 (13/14)Elementi di Programmazione1 Strutture di controllo 2.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Riassumendo: ipotesi per OLS 1.Modello lineare 2.X e Y sono frutto di osservazioni indipendenti 3.X è di rango pieno 4.I residui hanno media = 0 5.I residui.
Lez.6 (13/14)Elementi di Programmazione1 Lezione 6 Funzioni Passaggio di parametri.
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi (parte 2) Agostino Poggi.
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Metodi di minimizzazione Ricerca del minimo di dove è l’insieme delle variabili (coordinate)
Parte 5 Sommario Uso routine di calcolo predefinite di Matlab –Risoluzione equazioni non lineariRisoluzione equazioni non lineari –Ricerca minimo di una.
Agenda un po' diversa del solito
Process synchronization
Process synchronization
Transcript della presentazione:

Metodi iterativi su spazi di Krylov G. Puppo

Riassunto Metodo Ortomin Metodo del gradiente Metodo del gradiente coniugato Metodo GMRES Metodo GMRES con restart

Metodo Ortomin Questo metodo è definito dalla ricorsione:

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 X0 xold = b; normb=norm(b);

% Stima un tetto al numero massimo di iterazioni nmax=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; end nit=nmax; display('non converge')

Membrana elastica Il numero di iterazioni sale come N 2

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

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

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); end plot(v,stringa,'Markersize',5,'Markerfacecolor',colore)

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.

Metodo del gradiente Il metodo del gradiente è definito dalla seguente ricorsione:

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 eseguite if nargin < 3 tol = eps*100; end % Usa B come stima iniziale X0 xold = b; normb=norm(b);

% Stima un tetto al numero massimo di iterazioni nmax=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; end nit=nmax; display('non converge')

Membrana elastica Il metodo del gradiente converge per la matrice del Laplaciano

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

Metodo del gradiente coniugato Il metodo del gradiente coniugato è definito da:

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

% Usa b come stima iniziale X0 xold = b; normb=norm(b); % Stima un tetto al numero massimo di iterazioni nmax=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; end nit=nmax; display('non converge')

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

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

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.

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.

function [q,h]=arnoldi(a,b,n) % crea N vettori ortogonali per lo spazio di Krilov generato % da A, con stima iniziale B r0=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

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 =

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

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

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 X0 xold = b; normb=norm(b); % Stima un tetto al numero massimo di iterazioni nmax=length(b);

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 end nit=nmax; display('non converge')

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

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

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

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 eseguite if nargin < 4 tol = eps*100; end % Usa B come stima iniziale X0 xold = b; normb=norm(b); % Stima un tetto al numero massimo di iterazioni nmax=length(b)^2;

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

% 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; end nit=nmax; display('non converge')

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

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.