• Non ci sono risultati.

Calcolo di autovalori e autovettori

N/A
N/A
Protected

Academic year: 2021

Condividi "Calcolo di autovalori e autovettori"

Copied!
28
0
0

Testo completo

(1)

Universit`

a degli Studi di Padova

Dipartimento di Matematica

(2)

Metodo (Potenze)

Sia t

0

∈ R

n

definito da

t

0

=

n

X

i =1

α

i

x

i

, α

1

6= 0

Il

metodo delle potenze

genera la successione

y

0

= t

0

y

k

= Ay

k−1

, k = 1, 2, . . .

Nota.

E’ noto un teorema di convergenza per matrici diagonalizzabili, qualora gli

autovettori {λ

j

} siano tali che |λ

1

| > |λ

k

| per ogni k > 1 e il vettore iniziale

(3)

potenze

f u n c t i o n [ lambda1 , x1 , niter , err ]= p o w e r _ b a s i c ( A , z0 , toll , nmax )

% INPUT :

% A : MATRICE DI CUI VOGLIAMO CALCOLARE L ’ AUTOVALORE DI MASSIMO MODULO. % z 0 : VETTORE I N I Z I A L E (NON NULLO) .

% t o l l : TOLLERANZA .

% nmax : NUMERO MASSIMO DI ITERAZIONI . % OUTPUT :

% l a m b d a 1 : VETTORE DELLE APPROSSIMAZIONI DELL ’ AUTOVALORE DI MASSIMO MODULO. % x1 : AUTOVETTORE RELATIVO ALL ’ AUTOVALORE DI MASSIMO MODULO.

% n i t e r : NUMERO DI ITERAZIONI .

% e r r : VETTORE DEI RESIDUI PESATI RELATIVI A ” l a m b d a 1 ” . % TRATTO DA QUARTERONI−SALERI , ”MATEMATICA NUMERICA” , p . 1 8 4 . %

\begin{lstlisting } [ frame=single ] q=z0 /norm( z0 ) ; q2=q ; err = [ ] ; l a m b d a 1 = [ ] ; res=t o l l +1; n i t e r =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 ;

(4)

Qualche nota

(5)

nel ciclo while, q `

e un’approssimazione di un autoversore

relativo a λmax, mentre lam di λmax;

il ciclo si interrompe se un numero massimo di iterazioni

niter `

e raggiunto oppure

||Aq

k

− λ

k

||

2

| cos(θ

λ

k

)|

< tol

dove θ

λ

k

`

e l’angolo formato tra (un’approssimazione

(6)

Testiamo il codice per il calcolo dell’autoval. di massimo modulo di

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

−1

(1)

La matrice A `

e diagonalizzabile e ha autovalori 10, 10, 1. Si pu`

o vedere che

una base di autovettori relativa agli autovalori 10, 10, 1 `

e 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`

o essere utilizzato per il calcolo dell’autovalore di massimo modulo di A,

(7)
(8)
(9)

La convergenza `

e abbastanza veloce come si vede dalla quantit`

a

err, che consiste in un particolare residuo pesato.

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 ]= p o w e r _ m e t h o d ( A , x0 , maxit )

v=x0 ;

f o r i n d e x =1: m a x i t v _ o l d=v ; v=A*v_old ;

(10)

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):

(11)
(12)

La ragione `

e semplice. Per k relativamente piccolo si ha

A · t

k

≈ 10 · t

k

e quindi per s ≥ k

t

s

≈ A

s−k

· t

k

≈ 10 · A

s−k−1

· t

k

≈ · · · ≈ 10

s−k

· t

k

da cui

kt

s

k

2

≈ 10

s−k

· kt

k

k

2

(13)

Proviamo un test diverso, questa volta con la matrice

(diagonalizzabile)

A =



1

2

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

(14)

Dalla shell di Matlab/Octave:

>> A =[1 2 ; 0 −1] A =

1 2

0 −1

>> [ lambda1 , x1 , niter , err ]= p o w e r _ b a s i c ( A , [ 1 ; 3 ] , 1 0 ˆ ( − 8 ) , 1 5 ) l a m b d a 1 = −3.4483 e−002 −2.0000 e−001 . . . −3.4483 e−002 −2.0000 e−001 −3.4483 e−002 −2.0000 e−001 x1 = 3 . 1 6 2 3 e−001 9 . 4 8 6 8 e−001 n i t e r = 16 err = 4 . 4 5 6 7 e−001 2 . 4 0 0 0 e+000 . . . 4 . 4 5 6 7 e−001 2 . 4 0 0 0 e+000 4 . 4 5 6 7 e−001 2 . 4 0 0 0 e+000 >>

Dal residuo pesato `

e chiaro che il metodo non converge, e come

anticipato il motivo `

e la presenza di autovalori distinti aventi

(15)

A =

1

2

0

10

,

in cui il metodo funziona rapidamente (λmax = 10).

(16)

Una versione di base

invpower

del

metodo delle potenze inverse

[2,

p.184] `

e

f u n c t i o n [ lambda , x , niter , err ]= i n v p o w e r ( A , z0 , mu , toll , nmax )

% DATO UN VALORE mu , S I CALCOLA L ’ AUTOVALORE ” lambda mu ” PIU ’ VICINO A mu . % INPUT :

% A : MATRICE DI CUI VOGLIAMO CALCOLARE L ’ AUTOVALORE ” lambda mu ” . % z 0 : VETTORE I N I Z I A L E (NON NULLO) .

% mu : VALORE DI CUI VOGLIAMO CALCOLARE L ’ AUTOVALORE PIU ’ VICINO . % t o l l : TOLLERANZA .

% nmax : NUMERO MASSIMO DI ITERAZIONI . %

% OUTPUT :

% lambda : VETTORE DELLE APPROSSIMAZIONI DELL ’ AUTOVALORE DI MINIMO MODULO. % x : AUTOVETTORE RELATIVO ALL ’ AUTOVALORE DI MINIMO MODULO.

% n i t e r : NUMERO DI ITERAZIONI .

% e r r : VETTORE DEI RESIDUI PESATI RELATIVI A ” lambda ” . %

(17)

n=max(s i z e( A ) ) ; M=A−mu*e y e( n ) ; [ L , U , P ]=l u( M ) ; q=z0 /norm( z0 ) ; q2=q ’ ; err = [ ] ; l a m b d a = [ ] ; res=t o l l +1; n i t e r =0;

w h i l e ( res >= toll & niter <= nmax ) n i t e r=n i t e r +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 ) ; c o s t h e t a=a b s( q2*q ) ; i f ( c o s t h e t a > 5e−2)

res=norm( z−lam*q ) / costheta ; err=[err ; res ] ; lambda =[ lambda ; lam ] ; e l s e

d i s p(’ \n \ t [ ATTENZIONE ] : AUTOVALORE MULTIPLO ’) ; b r e a k; end

(18)

Forniamo ora alcune spiegazioni del codice in invpower.

Per risolvere il sistema lineare in ??, si effettua una

fattorizzazione PM = LU della matrice M = A − µI ;

All’interno del ciclo while, nella prima riga si calcola z

k

,

mentre nella successiva un suo versore q

k

, e σ

k

`

e

immagazzinato in lam;

(19)

piccolo in modulo della matrice

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

−1

(2)

Come visto la matrice A `

e quindi diagonalizzabile, ha autovalori 10, 10, 1 e

relativi autovettori `

e (1, 2, 7), (2, 5, 9), (3, 6, 3) formanti una base di R

3

. Quale

vettore iniziale consideriamo

(20)

>> 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 ] ; >> [ lambda , x , niter , err ]= i n v p o w e r ( A , z0 , mu , toll , nmax )

l a m b d a = 0 . 3 9 0 1 6 1 1 5 3 5 1 9 9 3 0 . 9 4 2 3 7 5 6 3 9 4 1 2 6 8 0 . 9 9 4 2 6 9 2 2 9 3 6 8 5 4 0 . 9 9 9 4 2 7 2 3 7 7 6 6 5 6 0 . 9 9 9 9 4 2 7 2 6 9 2 3 1 5 0 . 9 9 9 9 9 4 2 7 2 7 2 3 7 8 0 . 9 9 9 9 9 9 4 2 7 2 7 2 7 0 0 . 9 9 9 9 9 9 9 4 2 7 2 7 2 8 0 . 9 9 9 9 9 9 9 9 4 2 7 2 7 3 x = 0 . 4 0 8 2 4 8 2 9 0 5 3 8 0 9 0 . 8 1 6 4 9 6 5 8 0 8 5 3 5 0 0 . 4 0 8 2 4 8 2 9 0 5 3 8 0 9 n i t e r = 9 err = 0 . 8 1 5 3 5 2 1 6 5 0 7 3 7 7 0 . 0 8 3 5 8 1 0 1 2 8 9 0 6 2 0 . 0 0 8 3 8 1 2 6 2 5 8 3 9 6 0 . 0 0 0 8 3 8 3 6 0 7 8 8 9 1 0 . 0 0 0 0 8 3 8 3 8 4 2 7 1 2 0 . 0 0 0 0 0 8 3 8 3 8 6 6 2 0 0 . 0 0 0 0 0 0 8 3 8 3 8 6 8 5 0 . 0 0 0 0 0 0 0 8 3 8 3 8 6 8 0 . 0 0 0 0 0 0 0 0 8 3 8 3 8 7 >>

La convergenza `

e lineare (come si intuisce dalle approssimazioni

(21)

1 2 3 4 5 6 7 8 9 10−9 10−8 10−7 10−6 10−5 10−4 10−3 10−2 10−1 100

(22)

Per vederlo, dalla shell di Matlab/Octave calcoliamo l’errore

assoluto/relativo relativo all’autovalore 1:

>> s=1−lambda s = 0 . 6 0 9 8 3 8 8 4 6 4 8 0 0 7 0 . 0 5 7 6 2 4 3 6 0 5 8 7 3 2 0 . 0 0 5 7 3 0 7 7 0 6 3 1 4 6 0 . 0 0 0 5 7 2 7 6 2 2 3 3 4 4 0 . 0 0 0 0 5 7 2 7 3 0 7 6 8 5 0 . 0 0 0 0 0 5 7 2 7 2 7 6 2 2 0 . 0 0 0 0 0 0 5 7 2 7 2 7 3 0 0 . 0 0 0 0 0 0 0 5 7 2 7 2 7 2 0 . 0 0 0 0 0 0 0 0 5 7 2 7 2 7 >> s e m i l o g y( 1 :l e n g t h( s ) , s )

(23)

Nel metodo

QR

, data una matrice A, la si trasforma in una matrice

simile in forma di Hessenberg A

0

= T e quindi si eseguono le

iterazioni

A

k

= Q

k

R

k

, A

k+1

= R

k+1

Q

k+1

(24)

Una versione di base del metodo QR `

e la seguente. Si salvi il files

houshess.m

che implementa la trasformazione per similitudine di A

in una matrice di Hessenberg

f u n c t i o n [ H , Q ]= h o u s h e s s ( A )

% REDUCTION OF A MATRIX TO A SIMILAR HESSENBERG ONE . % SEE QUARTERONI , SACCO , SALERI P . 1 9 2 .

(25)

ove

vhouse.m

`

e definito da

f u n c t i o n [ v ,b e t a]= vhouse ( x )

% BUILDING HOUSEHOLDER VECTOR .

% SEE QUARTERONI , SACCO , SALERI P . 1 9 7 .

(26)

A partire da queste routines,

QRbasicmethod.m

determina la

matrice (quasi-)triangolare (a blocchi) T descritta nel teorema di

convergenza del metodo QR.

f u n c t i o n [ T ,h i s t]= Q R b a s i c m e t h o d ( T_input , maxit )

% QR METHOD FOR A SYMMETRIC TRIDIAGONAL MATRIX ” T i n p u t ” .

T=T _ i n p u t ;

h i s t=s o r t(d i a g( T ) ) ;

f o r i n d e x =1: m a x i t [ Q , R ]=q r( T ) ;

T=R*Q ; % NEW SIMILAR MATRIX .

h i s t=[h i s t s o r t(d i a g( T ) ) ] ; % IT STORES THE DIAGONAL ELEMENTS % OF THE ” i n d e x ” ITERATION .

end

(27)

Esercizio

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.

(28)

Netlib,http://www.netlib.org/templates/matlab/

Riferimenti

Documenti correlati

Per semplicit` a, dopo i teoremi di localizzazione di Gershgorin, mostreremo solo due metodi classici, uno per ognuna di queste classi, quello delle potenze e il metodo QR,

Invece in altri casi non è diagonalizzabile (es Sp(Tϑ)=1), cioè esistono degli autovettori, ma non sono sufficienti a formare una base2. Tϑ Rotazione rispetto

[r]

2 Se in K n esiste una base B di autovettori di A, allora A risulta diago- nalizzabile in quanto simile alla matrice diagonale degli autovalori (assunti in un dato ordine) e la

Usare l’equazione secolare per trovare n radici complesse ` e un sistema lento e poco efficace, salvo che per casi particolari.... In questo

Usare l’equazione secolare per trovare n radici complesse ` e un sistema lento e poco efficace, salvo che per casi particolari.... In questo modo gli elementi non diagonali

Usare l’equazione secolare per trovare n radici complesse ` e un sistema lento e poco efficace, salvo che per casi particolari.... Ci` o mi consente di verificare se ho trovato tutte

il polinomio caratteristico di una matrice quadrata di ordine n `e un poli- nomio di grado n, il coefficiente di λ n `e ± 1 ( 1 o -1 secondo che n sia pari o dispari) e il termine