Calcolo di autovalori e autovettori Alvise Sommariva Università degli Studi di Padova Dipartimento di Matematica 22 aprile 2013 Alvise Sommariva Calcolo di autovalori e autovettori 1/ 36
Metodo delle potenze Il problema del calcolo degli autovalori di una matrice quadrata A di ordine n consiste nel trovare gli n numeri (possibilmente complessi) λ tali che Ax = λx, x 0 (1) Sia A una matrice quadrata di ordine n con n autovettori x 1,..., x n linearmente indipendenti e autovalori λ 1,..., λ n tali che λ 1 > λ 2... λ n. (2) Il metodo delle potenze è definito come segue. Sia t 0 R n definito da n t 0 = α i x i, α 1 0, e si generi la successione i=1 y 0 = t 0 (3) y k = Ay k 1, k = 1, 2,... (4) Alvise Sommariva Calcolo di autovalori e autovettori 2/ 36
Metodo delle potenze Vale il seguente Teorema. Sia A è una matrice quadrata diagonalizzabile avente autovalori λ k tali che λ 1 > λ 2... λ n. Siano u k 0 autovettori relativi all autovalore λ k, cioè Sia y 0 = k Au k = λ k u k. α k u k, α 1 0. La succ. {y s } dove y s+1 = Ay s converge ad un vett. parallelo a x 1 e che il coeff. di Rayleigh (relativo al prodotto scalare euclideo) converge a λ 1. ρ(y s, A) := (y s, Ay s ) (y s, y s ) Alvise Sommariva Calcolo di autovalori e autovettori 3/ 36 (5)
Metodo delle potenze In virtú di alcune possibili problemi di underflow e underflow si preferisce normalizzare passo passo il vettore y k definito in (3). Conseguentemente l algoritmo del metodo delle potenze risulta u k = At k 1 (6) t k = u k β k, β k = u k 2 (7) l k = ρ(t k, A) (8) dove ρ(t k, A) è il coefficiente di Rayleigh definito in (5). Alvise Sommariva Calcolo di autovalori e autovettori 4/ 36
Metodo delle potenze f u n c t i o n [ lambda1, x1, niter, err ]= power_basic ( A, z0, toll, nmax ) % INPUT : % A : MATRICE % z0 : VETTORE INIZIALE (NON NULLO). % t o l l : TOLLERANZA. % nmax : NUMERO MASSIMO DI ITERAZIONI. % % OUTPUT: % lambda1 : SUCC. APPROX. AUTOVAL. DOMINANTE % x1 : AUTOVETT. DOMINANTE. % n i t e r : NUMERO ITERAZIONI. % e r r : VETTORE DEI RESIDUI PESATI RELATIVI A lambda1. % q=z0/norm ( z0 ) ; q2=q ; err = [ ] ; lambda1 = [ ] ; res=toll +1; niter =0; z=a q ; w h i l e ( res >= toll & niter <= nmax ) q=z/norm ( z ) ; z=a q ; lam=q z ; x1=q ; z2=q2 A ; q2=z2/norm ( z2 ) ; q2=q2 ; y1=q2 ; costheta=abs ( y1 x1 ) ; niter=niter +1; res=norm ( z lam q ) / costheta ; err =[ err ; res ] ; lambda1 =[ lambda1 ; lam ] ; end Alvise Sommariva Calcolo di autovalori e autovettori 5/ 36
Metodo delle potenze Qualche nota 1 il vettore iniziale z0 e normalizzato ed in err, lambda1 vengono memorizzati rispettivamente i valori dell errore compiuto e dell autovalore di massimo modulo λmax; 2 res=toll+1; forza l algoritmo ad entrare nel ciclo while, mentre z=a*q; serve per il calcolo dell autovalore λmax; 3 nel ciclo while, q è un approssimazione di un autoversore relativo a λmax, mentre lam di λmax; 4 il ciclo si interrompe se un numero massimo di iterazioni niter è raggiunto oppure Aq k λ k 2 cos(θ λk ) < tol dove θ λk è l angolo formato tra (un approssimazione del)l autovalore destro x1 e sinistro y1 associati a lam. Alvise Sommariva Calcolo di autovalori e autovettori 6/ 36
Metodo delle potenze. Esempio. Sia A = = 15.5 7.5 1.5 51 25 3 25.5 7.5 11.5 1 2 3 2 5 6 7 9 3 10 0 0 0 10 0 0 0 1 1 2 3 2 5 6 7 9 3 La matrice A è diagonalizzabile e ha autovalori 10, 10, 1. Si può vedere che una base di autovettori relativa agli autovalori 10, 10, 1 è composta da (1, 2, 7), (2, 5, 9), (3, 6, 3). Quale vettore iniziale del metodo delle potenze consideriamo z 0 = (1, 1, 1) = (7/6) (1, 2, 7) 1 (2, 5, 9) + (11/18) (3, 6, 3) e quindi il metodo delle potenze applicato ad A, e avente quale punto iniziale z 0 può essere utilizzato per il calcolo dell autovalore di massimo modulo di A, poichè α 1 = 7/6 0. Alvise Sommariva Calcolo di autovalori e autovettori 7/ 36 1 (9)
Metodo delle potenze. Esempio. Dalla shell di Matlab/Octave: >> S=[1 2 3 ; 2 5 6 ; 7 9 3 ] ; >> D=d i a g ( [ 1 0 10 1 ] ) ; >> A=S D i n v ( S ) A = 15.5000 7. 5 0 00 1. 5000 51.0000 25. 0000 3. 0 0 0 0 25.5000 7. 5 0 00 11. 5000 >> z0 =[1 1 1 ] ; >> toll =10ˆ( 8) ; >> nmax =10; >> format short e ; Alvise Sommariva Calcolo di autovalori e autovettori 8/ 36
Metodo delle potenze. Esempio. >> [ lambda1, x1, niter, err ]= power_basic ( A, z0, toll, nmax ) lambda1 = 1. 1587 e+001 1. 0138 e+001 1. 0014 e+001 1. 0001 e+001 1. 0000 e+001 1. 0000 e+001 1. 0000 e+001 1. 0000 e+001 1. 0000 e+001 1. 0000 e+001 x1 = 2.8583e 001 9.1466e 001 2.8583e 001 niter = 10 Alvise Sommariva Calcolo di autovalori e autovettori 9/ 36
Metodo delle potenze. Esempio. err = 2. 2466 e+000 2. 1028 e 001 2. 0934 e 002 2. 0925 e 003 2. 0924 e 004 2. 0924 e 005 2. 0924 e 006 2. 0924 e 007 2. 0924 e 008 2. 0924 e 009 >> La convergenza è abbastanza veloce come si vede dalla quantità err, che consiste in un particolare residuo pesato. Alvise Sommariva Calcolo di autovalori e autovettori 10/ 36
Metodo delle potenze. Esempio. Una questione sorge spontanea. Cosa sarebbe successo se avessimo utilizzato l algoritmo senza normalizzazione come ad esempio power method definito da f u n c t i o n [ lambda, v]= power_method ( A, x0, maxit ) v=x0 ; f o r end index =1: maxit v_old=v ; v=a v_old ; lambda=(v_old v ) /( v_old v_old ) ; Alvise Sommariva Calcolo di autovalori e autovettori 11/ 36
Metodo delle potenze. Esempio. Proviamo il test, facendo iterare il metodo prima 5, poi 100 volte e alla fine 1000 volte (si noti il settaggio della variabile maxit relativa al numero di iterazioni da compiere): >> x0 =[1 1 1 ] x0 = 1 1 1 >> A=[ 15.5 7. 5 1. 5 ; 51 25 3 ; 25.5 7. 5 1 1. 5 ] A = 15.5000 7. 5 0 00 1. 5000 51.0000 25. 0000 3. 0 0 0 0 25.5000 7. 5 0 00 11. 5000 >> [ lambda, v]= power_method ( A, x0, 5 ) lambda = 10. 0014 v = 1. 0 e+005 0.8333 2.6666 0.8333 Alvise Sommariva Calcolo di autovalori e autovettori 12/ 36
Metodo delle potenze. Esempio. >> [ lambda, v]= power_method ( A, x0, 1 0 0 ) lambda = 10. 0000 v = 1. 0 e+100 0.8333 2.6667 0.8333 >> [ lambda, v]= power_method ( A, x0, 1 0 0 0 ) lambda = NaN v = NaN NaN NaN >> Alvise Sommariva Calcolo di autovalori e autovettori 13/ 36
Metodo delle potenze. Esempio. La ragione è semplice. Per k relativamente piccolo si ha A t k 10 t k e quindi per s k da cui t s A s k t k 10 A s k 1 t k 10 s k t k t s 2 10 s k t k 2 spiegando quindi perchè si possano avere problemi di overflow applicando l algoritmo di base. Alvise Sommariva Calcolo di autovalori e autovettori 14/ 36
Metodo delle potenze. Esercizio 1. Sia A la matrice (diagonalizzabile) ( 1 2 A = 0 1 ), avente autovalori λ 1 = 1 e λ 2 = 1 e autovettori linearmente indipendenti (1, 0), ( 1, 1). Quale vettore iniziale poniamo x 0 = (1, 3) = 4 (1, 0) + 3 ( 1, 1) e quindi il metodo delle potenze applicato ad A, partendo da x 0 può essere sicuramente applicato. Si noti λ 1 = λ 2 = 1 pur essendo λ 1 λ 2. Si può dire a priori se il metodo converge? Verificarlo, utilizzando le routines precedentemente esposte. Alvise Sommariva Calcolo di autovalori e autovettori 15/ 36
Metodo delle potenze. Esercizio 2. Si consideri la matrice diagonalizzabile ( 1 2 A = 0 10 avente un solo autovalore di modulo massimo, uguale a 10. Si può dire a priori se il metodo converge? Verificarlo, utilizzando le routines precedentemente esposte. ), Alvise Sommariva Calcolo di autovalori e autovettori 16/ 36
Metodo delle potenze inverse. Si supponga A sia una matrice quadrata con n autovettori linearmente indipendenti, λ 1 λ 2... > λ n > 0. (10) e si desideri calcolare il piú piccolo autovalore in modulo, λ n. Applicando il metodo delle potenze ad A 1 si ottiene cosí la successione {t k } definita da Au k = t k 1 (11) t k = u k β k, β k = u k 2 (12) e convergente ad un vettore parallelo a x n. La succ. di coeff. di Rayleigh ρ(t k, A 1 ) := (t k, A 1 t k ) (t k, t k ) da cui si ottiene immediatamente λ n. = (t k, u k+1 ) (t k, t k ) 1/λ n. (13) Alvise Sommariva Calcolo di autovalori e autovettori 17/ 36
Metodo delle potenze inverse. Una versione di base invpower del metodo delle potenze inverse è f u n c t i o n [ lambda, x, niter, err ]= invpower ( A, z0, mu, toll, nmax ) % INPUT : % A : MATRICE % z0 : VETTORE INIZIALE (NON NULLO). % mu : VALORE DI CUI VOGLIAMO APPROX. L AUTOVAL. + VICINO. % t o l l : TOLLERANZA. % nmax : NUMERO MASSIMO DI ITERAZIONI. % % OUTPUT: % lambda : VETTORE DELLE APPROX DELL AUTOVAL. DI MIN. MOD. % x : AUTOVETTORE RELATIVO ALL AUTOVAL. DI MIN. MOD. % n i t e r : NUMERO DI ITERAZIONI. % e r r : VETTORE DEI RESIDUI PESATI RELATIVI A lambda. % % TRATTO DA QUARTERONI SALERI, MATEMATICA NUMERICA, p. 1 8 4. % Alvise Sommariva Calcolo di autovalori e autovettori 18/ 36
Metodo delle potenze inverse. f u n c t i o n [ lambda, x, niter, err ]= invpower ( A, z0, mu, toll, nmax ) n=max ( s i z e ( A ) ) ; M=A mu eye ( n ) ; [ L, U, P]= l u ( M ) ; q=z0/norm ( z0 ) ; q2=q ; err = [ ] ; lambda = [ ] ; res=toll +1; niter =0; w h i l e ( res >= toll & niter <= nmax ) niter=niter +1; b=p q ; y=l\ b ; z=u\ y ; q=z/norm ( z ) ; z=a q ; lam=q z ; b=q2 ; y=u \ b ; w=l \ y ; q2=(p w ) ; q2=q2/norm ( q2 ) ; costheta=abs ( q2 q ) ; i f ( costheta > 5e 2) res=norm ( z lam q ) / costheta ; err =[ err ; res ] ; lambda =[ lambda ; lam ] ; end e l s e end x=q ; d i s p ( \n \ t [ ATTENZIONE ] : AUTOVALORE MULTIPLO ) ; b r e a k ; Alvise Sommariva Calcolo di autovalori e autovettori 19/ 36
Metodo delle potenze inverse. Forniamo ora alcune spiegazioni del codice in invpower. 1 Per risolvere il sistema lineare, si effettua una fattorizzazione PM = LU della matrice M = A µi ; 2 All interno del ciclo while, nella prima riga si calcola z k, mentre nella successiva un suo versore q k, e σ k è immagazzinato in lam; 3 Similmente al metodo diretto si effettua il prodotto scalare di un autovalore sinistro con uno destro. Alvise Sommariva Calcolo di autovalori e autovettori 20/ 36
Metodo delle potenze inverse. Esempio. Applichiamo il metodo delle potenze inverse per il calcolo dell autovalore più piccolo in modulo della matrice 15.5 7.5 1.5 A = 51 25 3 25.5 7.5 11.5 1 2 3 10 0 0 1 2 3 = 2 5 6 0 10 0 2 5 6 7 9 3 0 0 1 7 9 3 1 (14) Come visto la matrice A è quindi diagonalizzabile, ha autovalori 10, 10, 1 e relativi autovettori è (1, 2, 7), (2, 5, 9), (3, 6, 3) formanti una base di R 3. Quale vettore iniziale consideriamo z 0 = (1, 1, 1) = (7/6) (1, 2, 7) 1 (2, 5, 9) + (11/18) (3, 6, 3) e quindi il metodo delle potenze inverse applicato ad A, e avente quale punto iniziale z 0 può essere utilizzato per il calcolo dell autovalore di minimo modulo di A. Alvise Sommariva Calcolo di autovalori e autovettori 21/ 36
Metodo delle potenze inverse. Esempio. >> z0 = [ 1 ; 1 ; 1 ] ; mu =0; toll =10ˆ( 8) ; nmax =10; >> A=[ 15.5 7. 5 1. 5 ; 51 25 3 ; 25.5 7. 5 1 1. 5 ] A = 15.50000000000000 7. 50000000000000 1. 50000000000000 51.00000000000000 25. 00000000000000 3. 00000000000000 25.50000000000000 7. 50000000000000 11. 50000000000000 >> [ lambda, x, niter, err ]= invpower ( A, z0, mu, toll, nmax ) lambda = 0. 39016115351993 0. 94237563941268 0. 99426922936854 0. 99942723776656 0. 99994272692315 0. 99999427272378 0. 99999942727270 0. 99999994272728 0. 99999999427273 x = 0. 40824829053809 0. 81649658085350 0. 40824829053809 niter = 9 Alvise Sommariva Calcolo di autovalori e autovettori 22/ 36
Metodo delle potenze inverse. Esempio. niter = 9 err = 0. 81535216507377 0. 08358101289062 0. 00838126258396 0. 00083836078891 0. 00008383842712 0. 00000838386620 0. 00000083838685 0. 00000008383868 0. 00000000838387 >> Alvise Sommariva Calcolo di autovalori e autovettori 23/ 36
Metodo delle potenze inverse. Esempio. La convergenza è lineare (come si intuisce dalle approssimazioni contenute nel vettore lambda). 10 0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 1 2 3 4 5 6 7 8 9 Figura : Grafico che illustra la convergenza lineare del metodo delle potenze inverse nell esempio 1. Alvise Sommariva Calcolo di autovalori e autovettori 24/ 36
Metodo delle potenze inverse.esempio. Per vederlo, dalla shell di Matlab/Octave calcoliamo l errore assoluto/relativo relativo all autovalore 1: >> s=1 lambda s = 0. 60983884648007 0. 05762436058732 0. 00573077063146 0. 00057276223344 0. 00005727307685 0. 00000572727622 0. 00000057272730 0. 00000005727272 0. 00000000572727 >> s e m i l o g y ( 1 : l e n g t h ( s ), s ) Alvise Sommariva Calcolo di autovalori e autovettori 25/ 36
Metodo QR. Sia A una matrice quadrata di ordine n. Utilizzando il metodo di Gram-Schmidt è possibile fattorizzare la matrice A come prodotto di due matrici Q ed R con Q unitaria (cioè Q T Q = Q Q T = I ) ed R triangolare superiore. Nel caso sia non singolare, allora tale fattorizzazione è unica qualora si chieda che i coefficienti diagonali di R siano positivi. Sia A 0 = A = Q 0 R 0 e si ponga Poichè A 1 := R 0 Q 0. Q 0 A 1 Q T 0 = Q 0 A 1 Q T 0 = Q 0 R 0 Q 0 Q T 0 = A 0 la matrice A 1 è simile ad A 0 (si ponga S = Q 1 0 = Q T 0 ) e quindi ha gli stessi autovalori. Alvise Sommariva Calcolo di autovalori e autovettori 26/ 36
Metodo QR. Sia quindi in generale A k = Q k R k A k+1 = R k Q k. Per le stesse motivazioni A k+1 è simile ad A k, e per transitività ad A 0. Quindi A k+1 ha gli stessi autovalori di A 0. Nelle implementazioni, per motivi di complessità computazionale, si trasforma dapprima la matrice A in una matrice simile in forma di Hessenberg (cioè per cui a i,j = 0 se i < j 1), oppure se A è simmetrica in forma tridiagonale (cioè per cui a i,j = 0 se i j > 1), e quindi si applica l algoritmo QR. Alvise Sommariva Calcolo di autovalori e autovettori 27/ 36
Metodo QR. Convergenza Per la convergenza del metodo esistono vari risultati Se la matrice A R n n è con autovalori tutti distinti in modulo, con λ 1 >... > λ n (15) allora l algoritmo QR converge ad una matrice A = (ai,j ) triangolare superiore, cioè a1,1 a1,2...... a 1,n 0 a2,2 a2,3... a 2,n 0 0 a3,3... a 3,n lim A k = 0 0......... k..... 0 0 0 an 1,n 1 an 1,n 0 0 0 0 an,n con λ k = a k,k. Alvise Sommariva Calcolo di autovalori e autovettori 28/ 36 (16)
Metodo QR. Convergenza Inoltre, 1 Se la condizione (15) non è verificata si può dimostrare che la successione {A k } tende a una forma triangolare a blocchi. 2 se A k = (a (k) i,j ), e λ i 1 0 ( ) a (k) i,i 1 = O λi k, i = 2,..., n, k. (17) λ i 1 3 se la matrice è simmetrica, allora A = diag(λ 1,..., λ 1 ). 4 se A è una matrice Hessenberg superiore allora l algoritmo QR converge ad una matrice A triangolare a blocchi, simile ad A e con gli autovalori di ogni blocco diagonale tutti uguali in modulo. Alvise Sommariva Calcolo di autovalori e autovettori 29/ 36
Metodo QR. Implementazione. Una versione di base del metodo QR è la seguente. La routine houshess.m implementa la trasformazione per similitudine di A in una matrice di Hessenberg. f u n c t i o n [ H, Q]= houshess ( A ) % RIDUZIONE DI UNA MATRICE IN UNA SIMILE DI HESSENBERG. % DA QUARTERONI, SACCO, SALERI P. 1 9 2. n=max ( s i z e ( A ) ) ; Q=eye ( n ) ; H=A ; f o r end k =1:( n 2) [ v, b e t a ]= vhouse ( H ( k+1:n, k ) ) ; I=eye ( k ) ; N=z e r o s ( k, n k ) ; m=l e n g t h ( v ) ; R=eye ( m ) b e t a v v ; H ( k+1:n, k : n )=R H ( k+1:n, k : n ) ; H ( 1 : n, k+1:n )=H ( 1 : n, k+1:n ) R ; P=[I, N ; N, R ] ; Q=Q P ; Alvise Sommariva Calcolo di autovalori e autovettori 30/ 36
Metodo QR. Implementazione. La routine houshess.m richiama vhouse.m definita da f u n c t i o n [ v, b e t a ]= vhouse ( x ) % COSTRUZIONE DELLA TRASFORMAZIONE DI HOUSEHOLDER. % DA QUARTERONI, SACCO, SALERI P. 1 9 7. n=l e n g t h ( x ) ; x=x/norm ( x ) ; s=x ( 2 : n ) x ( 2 : n ) ; v =[1; x ( 2 : n ) ] ; i f ( s==0) b e t a =0; e l s e mu=s q r t ( x ( 1 ) ˆ2+s ) ; i f ( x ( 1 ) <= 0) v ( 1 )=x ( 1 ) mu ; e l s e v ( 1 )= s /( x ( 1 )+mu ) ; end b e t a =2 v ( 1 ) ˆ2/( s+v ( 1 ) ˆ2) ; v=v/v ( 1 ) ; end Alvise Sommariva Calcolo di autovalori e autovettori 31/ 36
Metodo QR. Implementazione. Definiamo ora QRbasicmethod.m che calcola la matrice triangolare T relativa a QR: f u n c t i o n [ T, h i s t ]= QRbasicmethod ( T_input, maxit ) % METODO QR PER UNA MATRICE T i n p u t. T=T_input ; h i s t=s o r t ( d i a g ( T ) ) ; f o r end index =1: maxit [ Q, R]= qr ( T ) ; T=R Q ; % MATRICE SIMILE. h i s t =[ h i s t s o r t ( d i a g ( T ) ) ] ; % REGISTRA ELEM. DIAG. Alvise Sommariva Calcolo di autovalori e autovettori 32/ 36
Metodo QR. Esempio. >> A=[1 2 3 ; 2 5 6 ; 7 9 3 ] ; >> [ H, Q]= houshess ( A ) H = 1. 0000 3. 4 3 4 0 1. 0 989 7. 2801 7. 1 1 3 2 8. 3 962 0. 0000 5. 3 9 6 2 0. 8 868 Q = 1. 0000 0 0 0 0. 2747 0. 9 6 15 0 0. 9615 0.2747 >> [ T, h i s t ]= QRbasicmethod ( H, 1 0 0 0 ) ; >> format short e >> T T = 1. 3153 e+01 4.5070 e+00 1.4572 e+00 0 4.4602 e+00 1.6012 e+00 0 0 3. 0682 e 01 >> Alvise Sommariva Calcolo di autovalori e autovettori 33/ 36
Metodo QR. Esempio. >> format long e >> e i g ( A ) ans = 1. 315341168250702 e+01 3. 068153783179930 e 01 4.460227060825006 e+00 >> d i a g ( T ) ans = 1. 315341168250701 e+01 4.460227060825004 e+00 3. 068153783179954 e 01 >> Da un confronto con la routine utilizzata da Matlab/Octave si vede immediatamente che la versione utilizzata di QR ha calcolato con una buona precisione gli autovalori richiesti. Alvise Sommariva Calcolo di autovalori e autovettori 34/ 36
Metodo QR. Esercizio 1. Data la matrice di Hilbert di ordine 5, ottenibile in Matlab col comando hilb(5) si calcolino col metodo delle potenze i suoi minimi e massimi autovalori in modulo. Da questi si calcoli il condizionamento della matrice in norma 2 e lo si confronti con cond(hilb(5),2). Eseguire lo stesso esercizio utilizzando il metodo QR. Alvise Sommariva Calcolo di autovalori e autovettori 35/ 36
Metodo QR. Esercizio 2 (facoltativo). In questa sezione desideriamo calcolare gli autovalori della matrice (simmetrica e a banda) di Poisson (scegliere il parametro 20) con A = B = B I 0... 0 I B I... 0 0 I B...... 0......... I 0 0... I B 4 1 0... 0 1 4 1... 0 0 1 4...... 0......... 1 0 0... 1 4. che si ottiene dalla definizione della matrice di Poisson presente nella gallery di Matlab. Alvise Sommariva Calcolo di autovalori e autovettori 36/ 36