Sei sulla pagina 1di 8

ESERCITAZIONE

Metodi iterativi per la soluzione di sistemi lineari


Numerosi problemi delle scienze applicate richiedono la risoluzione di sistemi di grandi dimensioni. Le matrici dei coefcienti di tali sistemi sono spesso sparse, ovvero il numero degli elementi diversi da zero, invece di essere approssimativamente n2 , c n, con n la dimensione della matrice e c una costante piccola indipendente da n. Per tali matrici, si memorizzano solo gli elementi diversi da zero (nonzeri), con conseguente notevole risparmio di occupazione di memoria. Per matrici sparse la fattorizzazione LU risulta spesso inefciente, per il fatto che i fattori L ed U di una matrice sparsa possono essere densi (cio con pochi elementi nulli) o comunque molto meno sparsi della matrice di partenza. Per renderci conto di ci costruiamo una matrice sparsa in Matlab/Octave nel seguente modo
n = 200; A = 4 diag ( ones ( n , 1 ) )diag ( ones ( n 1) , 1)diag ( ones ( n 1) , 1 ) ; A ( 1 , : ) = ones ( 1 , n ) ; A ( : , 1 ) = ones ( n , 1 ) ;

Il pattern di sparsit (posizione dei nonzeri) si pu visualizzare nel seguente modo:


f i g u r e ; spy (A) ; t i t l e ( A ) ;

La fattorizzazione LU riempie i fattori triangolari come si vede dal loro pattern.


[ L , U, P ] = l u (A) ; f i g u r e ; spy ( L ) ; t i t l e ( L ) ; f i g u r e ; spy (U) ; t i t l e ( U ) ;

Possiamo ora memorizzare le matrici A, L, U in formato sparso trasformandole mediante il comando sparse e osservarne la differente occupazione di memoria
>> Asparse= s p a r s e (A) ; Lsparse= s p a r s e ( L ) ; Usparse= s p a r s e (U) ; >> whos s p a r s e V a r i a b l e s i n t h e c u r r e n t scope : A t t r Name Size B yt e s C l a s s ==== ==== ==== ===== ===== Asparse 200 x200 12732 double Lsparse 200 x200 242004 double Usparse 200 x200 242004 double

Calcolo Numerico

LT Informatica A. A. 20112012

A 0 0

U 0

20

20

20

40

40

40

60

60

60

80

80

80

100 0 20 40 60 80 100

100 0 20 40 60 80 100

100 0 20 40 60 80 100

La soluzione di sistemi lineari sparsi motiva luso di metodi alternativi ai metodi diretti. Tali metodi si deniscono metodi iterativi perch cercano la soluzione del sistema generando una successione di vettori { x (k) , k 0} che sotto certe condizioni converge alla soluzione esatta, cio lim x (k) = x.
k

Metodi iterativi: generalit


Vogliamo risolvere il sistema lineare Ax = b, con A matrice n n e b vettore noto di dimensione n. Costruiamo metodi iterativi sotto la condizione che A sia non singolare e che inoltre aii = 0, i = 1, . . . , n. Per questo scriviamo la matrice generica A come A = MN Il sistema lineare Ax = b si pu dunque riformulare come segue:

( M N )x = b

Mx Nx = b

=
Nx + M1 b

Mx = Nx + b

x=M

x = Px + q

La matrice P = M1 N denita nellultima equazione si denisce matrice di iterazione. Ricaviamo ora un metodo iterativo consistente derivandolo dalle equazioni precedenti: Mx (k+1) = Nx (k) + b x x
( k +1) ( k +1)

(1)

= M

Nx

(k)

+M

b (2)

= Px

(k)

+q

Per caratterizzare i singoli metodi iterativi, si parte dal fatto che A si pu scrivere come A = L+D+U dove D la matrice diagonale con elementi uguali alla diagonale di A, L ed U sono la parte triangolari inferiore di A (senza la diagonale) e triangolare superiore di A (senza

Esercitazione 5: Metodi iterativi per la soluzione di sistemi lineari la diagonale), rispettivamente. I metodi iterativi stazionari si ottengono denendo opportunamente N ed M in funzione di L, D, U : 1. Metodo di Jacobi. M = D; N = ( L + U ). 2. Metodo di Gauss-Seidel. M = L + D; N = U . 3. Metodo SOR. M = L + D; N = (1 ) D U , con (0, 2) parametro reale .

Convergenza dei metodi iterativi


Esiste una condizione necessaria e sufciente di convergenza che accomuna tutti i succitati metodi iterativi: Teorema 1 Un metodo iterativo del tipo (2) converge per ogni scelta del vettore iniziale x0 se e solo se tutti gli autovalori della matrice di iterazione P sono in modulo minori di 1, ovvero se ( P) < 1. Esercizio 1 Data la matrice 4 1 0 0 1 4 1 0 A= 0 1 4 1 0 0 1 4 1. Calcolare il raggio spettrale delle matrici di iterazione di Jacobi e di Gauss-Seidel. 2. Che rapporto c tra ( PJ ) e ( PS ). Perch? Quale dei due metodi converger pi velocemente alla soluzione di Ax = b? Calcolare le velocit di convergenza dei due metodi. Risoluzione del punto 1. Il punto 2 poi lasciato per esercizio.
>> A = [ 4 1 0 0 ; 1 4 1 0 ; 0 1 4 1; 0 0 1 4 ] ; >> D = diag ( diag (A) ) ; >> L = t r i l (A, 1) ; >> U = t r i u (A, 1 ) ; >> P_J = inv (D) ( L+U) ; >> P_S = inv (D+L ) U; >> e i g ( P_J ) ans =

0.40451
>> e i g ( P_S ) ans = 0.00000 >> r h o _ J rho_J = >> rho_S rho_S =

0.15451

0.15451

0.40451

0.16363

0.02387

0.00000

= max ( abs ( e i g ( P_J ) ) ) 0.40451 = max ( abs ( e i g ( P_S ) ) ) 0.16363

Calcolo Numerico

LT Informatica A. A. 20112012

In questo caso entrambi i metodi sono convergenti come si poteva vedere anche dallesame della matrice che risulta essere diagonalmente dominante in senso stretto.

Implementazione dei metodi iterativi


La formula (2) non adatta per limplementazione essendo basata sul calcolo esplicito della matrice P e quindi sulla poco efciente inversione esplicita di matrici triangolari. Si preferisce utilizzare invece la formula (1) che permette il calcolo delliterata corrente x (k+1) in funzione di x (k) risolvendo un sistema lineare avente M come matrice dei coefcienti. Si noti che M diagonale per il metodo di Jacobi, triangolare inferiore per i metodi di Gauss-Seidel e SOR. Esercizio 2 Sia data la matrice 4 3 0 A = 2 3 0.5 , 0 1 2.5 si vuole risolvere il sistema lineare Ax = b; con b = A ones(3, 1). 1. Si dica perch il metodo di Jacobi converge. 2. Si scriva una function Matlab/Octave che implementa il metodo di Jacobi per la soluzione del sistema lineare. Si usi un test di arresto basato sulla norma del residuo relativo e una tolleranza pari a 1e 8. Risoluzione: scriviamo prima la function
f u n c t i o n [ x , i t e r , vnormres ]= j a c o b i (A, itmax , t o l l , b ) %Metodo i t e r a t i v o di J a c o b i [ x , i t e r , vnormres ]= j a c o b i (A, itmax , t o l l , b ) [ n ,m] = s i z e (A) ; % Se non e t r a i p a r a m e t r i di input , s i c r e a b i n modo che l a s o l u z i o n e % vera s i a un v e t t o r e con t u t t e l e componenti u g u a l i a 1 i f nargin ==3 xvera = ones ( n , 1 ) ; b = A xvera ; end % v e t t o r e i n i z i a l e x_0 uguale a l v e t t o r e n u l l o x = zeros (n , 1 ) ; % partizionamento d e l l a matrice D = diag ( diag (A) ) ; L = t r i l (A, 1) ; U = t r i u (A, 1 ) ; M = D; N = (L +U) ; % norme normres= norm ( bA x , 2 ) ; vnormres= [ normres ] ; normb = norm ( b , 2 ) ; iter = 0; % c i c l o i t e r a t i v o M x_k+1 = N x_k + b ; while normres/normb > t o l l & i t e r < itmax

(3)

Esercitazione 5: Metodi iterativi per la soluzione di sistemi lineari


t n o t o = N x + b ; x = M\ t n o t o ; normres = norm ( bA x , 2 ) ; vnormres = [ vnormres ; normres ] ; iter = iter + 1; end

Poi deniamo la matrice e richiamiamo la function jacobi.


>> A = [ 4 3 0 ; 2 3 0 . 5 ; 0 1 2 . 5 ] A = 4.00000 3.00000 0.00000 2.00000 3.00000 0.50000 0.00000 1.00000 2.50000 >> [ x , i t e r , normres ]= j a c o b i (A, 1 0 0 , 1 e 8) ; >> i t e r i t e r = 65

Se volessimo visualizzare il prolo di convergenza del metodo, dovremmo creare un graco semilogaritmico della norma del residuo in funzione dellindice di iterazione:
>> semilogy ( 0 : i t e r , normres , o ) ; t i t l e ( metodo di J a c o b i ) ; x l a b e l ( i t e r a z i o n i ) ; y l a b e l ( || r e s i d u o || )

Esercizio 3 Seguendo la traccia della function jacobi.m si scriva una function gauss_seidel.m che implementi il metodo di Gauss Seidel Esercizio 4 Si risolva il sistema Ax = b essendo A la matrice denita in (3) facendo uso della function gauss_seidel.m, con tolleranza 1e 8. Si confrontino i due metodi mediante un graco semilogaritmico con lindice di iterazione sulle ascisse e la norma del residuo sulle ordinate. Risoluzione Lesercizio potrebbe essere risolto usando, ad esempio, il seguente script:
A=[4 3 0 ; 2 3 0 . 5 ; 0 1 2 . 5 ] ; b=A ones ( 3 , 1 ) ; [ x j , i t e r j , vnormres_j ]= j a c o b i (A, 1 0 0 , 1 e 8,b ) [ xs , i t e r s , vnormres_s ]= g a u s s _ s e i d e l (A, 1 0 0 , 1 e 8,b ) semilogy ( 0 : i t e r j , vnormres_j , o ) ; hold on ; semilogy ( 0 : i t e r s , vnormres_s , r ) ; hold o f f ; legend ( J a c o b i , S e i d e l ) ; t i t l e ( Confronto t r a i metodi di J a c o b i e GaussS e i d e l ) ; xlabel ( Iterazioni ) ; y l a b e l ( || r e s i d u o || ) ;

Il graco prodotto dallo script precedente quello mostrato in Figura 1. Si osserva che il metodo di Gauss-Seidel converge pi rapidamente del metodo di Jacobi.

Calcolo Numerico

LT Informatica A. A. 20112012

Confronto tra i metodi di Jacobi e Gauss-Seidel 102

Jacobi Seidel
100

|| residuo ||

10-2

10-4

10-6

10-8 0 10 20 30 40 50 60 70 Iterazioni

Figura 1: Norma del residuo in funzione del numero di iterazioni per i metodi di Jacobi e Gauss-Seidel nella soluzione del sistema lineare dellEsercizio 3.

Metodo SOR o di rilassamento


Il metodo di rilassamento, di cui abbiamo gi ricordato la matrice di iterazione, si pu vedere come generalizzazione del metodo di Gauss-Seidel mediante un parametro di accelerazione . Il metodo di rilassamento coincide con Gauss-Seidel per = 1. Perch si abbia convergenza del metodo SOR occorre che 0 < < 2. Questa condizione diventa anche sufciente per la convergenza del metodo SOR se: 1. La matrice del sistema A simmetrica e denita positiva 2. La matrice del sistema tridiagonale, inoltre il metodo di Jacobi converge e tutti gli autovalori della matrice di iterazione PJ sono reali. Nel secondo caso inoltre possibile determinare un valore analitico dellomega ottimo ovvero di quel valore che produce il minimo numero di iterazioni (minimo raggio spettrale della matrice di iterazione P ): opt = 1+ 2 = 1 ( PJ )2 1+ 2 1 ( PS )

Si deduce che l ottimo sempre compreso tra 1 e 2. Inne il raggio spettrale della matrice di iterazione di SOR, per opt , pu essere determinato analiticamente dalla formula ( P ) = 1. Esercizio 5 Seguendo la traccia della function gauss_seidel.m si scriva una function sor.m che implementi il metodo SOR. Rispetto alle precedenti function che implementano

Esercitazione 5: Metodi iterativi per la soluzione di sistemi lineari i metodi di Jacobi e Gauss-Seidel, la function sor.m necessita di un ulteriore parametro di input, (0, 2).

Costruiamo ora una matrice tridiagonale in formato sparso usando il comando spdiags.
>> n = 1 0 ; >> a = ones ( n , 1 ) ; >> A = spdiags ([ 2 a , 4 . 0 1 a , 2 a ] , [ 1 , 0 , 1 ] , n , n ) ;

Esercizio 6 1. Si verichi che il metodo SOR converge per ogni (0, 2) alla soluzione del sistema lineare avente A come matrice dei coefcienti. 2. Si risolva poi il sistema Ax = b con b = A ones(10, 1) facendo uso della function sor.m con tolleranza 1e 8 e = 1.2. 3. Si calcoli il valore ottimo di a partire dalla formula che usa il raggio spettrale della matrice di iterazione di Jacobi. 4. Si risolva nuovamente il sistema usando il metodo SOR con il valore ottimo di determinato al punto precedente e si confronti il numero di iterazioni necessario per approssimare la soluzione con tolleranza 1e 8 con quello ottenuto al punto 2. Risoluzione Possiamo stabilire la convergenza del metodo SOR in due modi: 1o MODO: Essendo la matrice A simmetrica, diagonalmente dominante in senso stretto e avendo A elementi diagonali positivi, essa denita positiva, dunque il metodo SOR converge per ogni scelta di (0, 2). 2o MODO: A tridiagonale inoltre il metodo di Jacobi converge ( A strettamente diagonalmente dominante) e gli autovalori della matrice di iterazione di Jacobi sono reali essendo PJ simmetrica. Lo script che chiama la function sor.m si pu scrivere come segue:
n=10; a = ones ( n , 1 ) ; A = spdiags ([ 2 a , 4 . 0 1 a , 2 a ] , [ 1 , 0 , 1 ] , n , n ) ; t o l l = 1e 8; itmax = 2 0 0 ; [ x , i t e r , normres ]= s o r (A, itmax , t o l l , 1 . 2 ) ; iter

Il numero di iterazioni risulta uguale a 126. Utilizzando listruzione eig si trova che ( PJ ) = 0.9571 da cui opt = 2 1+ 1 (0.9571)2

= 1.5507.

Si verichi che con questo valore di il metodo SOR converge alla soluzione approssimata con la tolleranza richiesta in sole 37 iterazioni.

Calcolo Numerico

LT Informatica A. A. 20112012

Esercizi proposti
Esercizio 1 Si denisca la matrice tridiagonale A di ordine 6 con elementi pari a 2 sulla diagonale principale ed elementi pari a aij = 1 per |i j| = 1. Si vuole risolvere il sistema lineare Ax = b; con b = A ones(6, 1) con una tolleranza di 1e 8. 1. Si dica perch il metodo di Gauss-Seidel converge. Dedurre che anche il metodo di Jacobi converge. Mostrare inoltre che possibile determinare un valore ottimo del parametro di rilassamento del metodo SOR. 2. Si risolva il sistema mediante il metodo di Jacobi. 3. Si risolva il sistema mediante il metodo di Gauss-Seidel usando la function SOR.m. 4. Si calcoli teoricamente il valore ottimale di in funzione del raggio spettrale della matrice di iterazione del metodo di Gauss-Seidel (o di Jacobi). 5. Si risolva il sistema lineare mediante il metodo SOR utilizzando il valore di trovato al punto precedente. 6. Si produca un unico graco semilogaritmico delle norme dei residui relativo ai metodi di Jacobi, Gauss-Seidel e SOR. 7. Per i tre metodi si determini la velocit di convergenza R a partire dal corrispondente raggio spettrale della matrice di iterazione. Si mettano in relazione i valori trovati di R con le iterazioni impiegate dai vari metodi. Esercizio 2 Si risolva il sistema lineare dellesercizio precedente con il metodo SOR per diversi valori di . Si parta da = 1 no ad = 1.8 con passo 0.05. 1. Si visualizzi in un graco landamento del numero di iterazioni al variare di . 2. Si determini dal graco il valore sperimentale di opt . 3. Si commentino i risultati ottenuti confrontandoli con il valore teorico di ottimale ricavato al punto 4 dellesercizio precedente.

NOTA BENE: Si porti allesame orale una relazione scritta con la soluzione di questi esercizi, i graci ottenuti e gli m-les Matlab/Octave utilizzati.