12.07.2015 Views

Autovalori e autovettori - Università degli studi di Cagliari.

Autovalori e autovettori - Università degli studi di Cagliari.

Autovalori e autovettori - Università degli studi di Cagliari.

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Università <strong>degli</strong> <strong>stu<strong>di</strong></strong> <strong>di</strong> <strong>Cagliari</strong>Facoltà <strong>di</strong> ingegneriaCorso <strong>di</strong> laurea in ingegneria elettronicaTesina per il corso <strong>di</strong>Calcolo Numerico 2Prof. Giuseppe Rodriguez<strong>Autovalori</strong> e <strong>autovettori</strong>A cura <strong>di</strong>Pamela SulisMatricola 378501


In<strong>di</strong>ceBrevi richiami sulle matrici …………………………………………………… pag. 3Problema : calcolo <strong>degli</strong> autovalori …………………………………………... pag. 6Algoritmo QR …………………………………………………………………….. pag. 11Teoremi <strong>di</strong> Gershgorin ………………………………………………………….. pag. 15Metodo delle potenze e applicazioni ………………………………………… pag. 18Metodo delle potenze inverse e applicazioni ……………………………. pag. 242


L’istruzione Matlab che ci consente <strong>di</strong> determinare il rango <strong>di</strong> una matrice è la seguente:n=rank(A)n =3rank(A)=rank(A)Data una matrice quadrata A appartenente a R n×n , si chiama autovalore <strong>di</strong> A, quel numero reale ocomplesso β tale che per ogni vettore x ≠ 0 sod<strong>di</strong>sfa l’equazione Ax = βx .Il vettore x viene detto autovettore associato all’autovalore β. Osserviamo che l’autovettore x non éunico. Infatti, se α, appartenente a R, è un qualsiasi numero reale non nullo, allora il vettore y=αxè ancora un autovettore associato all’autovalore β.Se l’autovettore x è noto, il corrispondente autovalore si può determinare usando il quoziente <strong>di</strong>Rayleighβ= (x T Ax)/(x T x) .Dalla definizione precedente, segue che β è autovalore <strong>di</strong> A, se è una ra<strong>di</strong>ce del polinomiocaratteristicop a(β) = det(A − β I) .Infatti, l’equazione precedente è equivalente a(A − βI)x = 0ma essendo x ≠ 0 essa sarà sod<strong>di</strong>sfatta se e solo se la matrice A−βI risulta essere singolare.Inoltre, il polinomio caratteristico associato ad una matrice A <strong>di</strong> or<strong>di</strong>ne n, ha n ra<strong>di</strong>ci reali e/ocomplesse. Se β, appartenente a C, è un autovalore <strong>di</strong> A, anche β è un autovalore complesso <strong>di</strong> A.Premettiamo due utili risultati circa gli autovalori <strong>di</strong> matrici: il primo ci ricorda che letrasformazioni per similitu<strong>di</strong>ne conservano gli autovalori, mentre il secondo ci ricorda che lematrici simmetriche hanno autovalori reali.Definiamo come spettro <strong>di</strong> una matrice l’insieme <strong>di</strong> tutti i suoi autovaloriσ(Α)= {β 1,…..β n}e raggio spettrale (rho) il massimo dei moduli <strong>degli</strong> autovalori.In Matlab, per calcolare gli autovalori <strong>di</strong> A e il suo raggio spettrale, usiamo le seguenti istruzioniEsempio» eig(A)ans =0.900521.6931-12.5936β=eig(A)rho=max(abs(β))Il polinomio caratteristico si ottiene con il comandoEsempio» p=poly(A)p=poly(A)4


p =1.0000 -10.0000 -265.0000 246.0000Si definisce numero <strong>di</strong> con<strong>di</strong>zionamento <strong>di</strong> una matrice A, relativamente alla risoluzione <strong>di</strong> unsistema lineare, la quantità k(A)= ║A║║A -1 ║.Il numero <strong>di</strong> con<strong>di</strong>zionamento misura il massimo fattore <strong>di</strong> amplificazione dell’errore relativo sullasoluzione rispetto all’errore relativo sui dati. Il valore del numero <strong>di</strong> con<strong>di</strong>zionamento è influenzatodalla norma matriciale adottata. Useremo un pe<strong>di</strong>ce quando vorremo porre in evidenza la normausata per calcolarla.Per calcolare il numero <strong>di</strong> con<strong>di</strong>zionamento <strong>di</strong> una matrice in Matlab usiamo le seguentiistruzioni:k 2(A)= cond(A)k 1(A)= cond(A,1)k(∞)= cond(A,inf)5


Problema: calcolo <strong>degli</strong> autovaloriProblemi <strong>di</strong> calcolo <strong>degli</strong> autovalori compaiono in molte applicazioni:<strong>stu<strong>di</strong></strong>o <strong>di</strong> vibrazioni e stabilità<strong>di</strong> strutture o circuiti, analisi <strong>di</strong> meto<strong>di</strong> iterativi , analisi <strong>di</strong> stabilità dei sistemi <strong>di</strong>fferenziali,chimica computazionale e altre. In ogni caso occorre valutare se, per il problema che si staconsiderando, occorre calcolare l’intero spettro della matrice o solo alcuni autovalori.Per calcolare autovalori e <strong>autovettori</strong> corrispondenti <strong>di</strong> una matrice A, si può trasformare lamatrice A in una forma più semplice. Tale trasformazione è detta <strong>di</strong> similitu<strong>di</strong>ne e non devealterare lo spettro della matrice.Proposizione. Matrici simili hanno gli stessi autovaloriDim. Siano A e B simili, ovvero P −1 AP = B, con P invertibile. Ora, se β è autovalore <strong>di</strong> A e x ≠0l’autovettore associato, allora si haBP −1 x = P −1 Ax = βP −1 x .quin<strong>di</strong> β è autovalore <strong>di</strong> B con autovettore associato P −1 x.Proposizione. Matrici simmetriche hanno autovalori reali.Dim. Dapprima osserviamo che, per il coniugato del polinomio caratteristico <strong>di</strong> A, valgono leidentitàdet(A − βI) = det(A − βI)* = det(A* − β cI)dove A* `e la matrice trasposta e coniugata <strong>di</strong> A. Si deduce allora che gli autovalori <strong>di</strong> A* sono iconiugati <strong>di</strong> quelli <strong>di</strong> A. Si conclude che β=β se e solo se β appartiene ad R.Prima <strong>di</strong> procedere nello <strong>stu<strong>di</strong></strong>o del problema della determinazione <strong>di</strong> autovalori e <strong>autovettori</strong> ciinteressa analizzare le matrici <strong>di</strong>agonalizzabili.Una matrice A appartenente a R nxn è <strong>di</strong>agonalizzabile se esiste una matrice X, appartenente a R nxnnon singolare tale cheX -1 AX=D= <strong>di</strong>ag(β 1,…..,β n)con X che ha per colonne gli n <strong>autovettori</strong> <strong>di</strong> A (che formano una base per R n ).Nel caso <strong>di</strong> matrice rettangolare non parliamo <strong>di</strong> autovalori ma <strong>di</strong> valori singolari e vale il seguenterisultato, noto come decomposizione ai valori singolari (o SVD):Sia A appartenente a R m×n . Allora esistono due matrici ortogonali U, appartenente a R m×m , e V,appartenente a R n×n tali cheU T AV = ∑con ∑ = <strong>di</strong>ag(σ 1, . . . , σ p) appartenente a R m×n , p = min{m, n}, σ 1 ≥ σ 2 ≥ ≥ σ p ≥ 0.I numeri σ i sono i valori singolari <strong>di</strong> A.Una matrice <strong>di</strong>agonalizzabile è simile a una matrice <strong>di</strong>agonale. Quando X è una matrice unitaria,<strong>di</strong>remo che A è unitariamente <strong>di</strong>agonalizzabile. Bisogna notare che non tutte le matrici sono<strong>di</strong>agonalizzabili.Una matrice A <strong>di</strong> <strong>di</strong>mensione n è <strong>di</strong>agonalizzabile se e solo se ammette n <strong>autovettori</strong> in<strong>di</strong>pendenti.Sia Ax i=β ix i, i=1,….,n. In forma matriciale questa relazione può essere riscritta come1 … …A[x 1 ……… x n]= [x 1 ……. x n] ⋮ ⋱ ⋮ … ⋯ nossia AX=XD, con X=[x 1 ….. x n]. Se gli <strong>autovettori</strong> sono in<strong>di</strong>pendenti la matrice X è invertibile equin<strong>di</strong> possiamo moltiplicare l’equazione precedente per X -1 , ottenendoX -1 AX=DQuest’espressione viene detta fattorizzazione spettrale della matrice A.6


Teorema <strong>di</strong> Schur. Per ogni matrice complessa A <strong>di</strong> <strong>di</strong>mensione n esiste una matrice unitariacomplessa U tale che ∗ ∗U*AU=T= ∗Essendo β i, i=1,……,n, gli autovalori <strong>di</strong> A. Le matrici U e T non sono univocamente determinate.Tale fattorizzazione è detta decomposizione <strong>di</strong> Schur della matrice A.Il calcolo <strong>di</strong> autovalori e <strong>autovettori</strong> <strong>di</strong> una matrice è un problema non lineare e quin<strong>di</strong> moltodelicato. Questo problema viene affrontato usando algoritmi che si basano su idee molto<strong>di</strong>fferenti. La determinazione <strong>degli</strong> autovalori è computazionalmente molto onerosa e in alcuni casiporta a delle approssimazioni inaccurate. Per questo motivo spesso ci si accontenta solo <strong>di</strong> unarisposta parziale:• Determinando autovalori <strong>di</strong> modulo massimo e/o minimo ( autovalori estremali);• Operando una separazione <strong>degli</strong> insiemi in modo da in<strong>di</strong>viduare <strong>degli</strong> insiemi checontengono un solo autovalore;• Localizzando gli autovalori, ossia trovando una regione del piano complesso che contengatutti gli autovalori (teoremi <strong>di</strong> Gershgorin);• Dato un autovalore trovare il corrispondente autovettore;• Raffinando la stima <strong>di</strong> un autovalore ottenuta me<strong>di</strong>ante un altro algoritmo;• Nell’ipotesi che sia noto solo un autovalore trovando una matrice <strong>di</strong> <strong>di</strong>mensione n-1 cheabbia gli stessi autovalori della matrice iniziale tranne quello noto.In Matlab autovalori e <strong>autovettori</strong> sono calcolati con le seguenti funzioni:• Lambda=eig(A) restituisce gli autovalori <strong>di</strong> A» A = [1 2 3; 4 9 2; 6 7 6]A =1 2 34 9 26 7 6» lambda = eig(A)lambda =-1.233613.51473.7189[V,D]= eig(A) restituisce la matrice V, le cui colonne sono gli <strong>autovettori</strong>, e la matrice<strong>di</strong>agonale D, i cui elementi <strong>di</strong>agonali sono gli autovalori.Se A è <strong>di</strong>agonalizzabile, le matrici V e D costituiscono la sua fattorizzazione spettrale.» [V,D]= eig(A)V =-0.8484 0.2763 0.38540.2394 0.5832 -0.56750.4721 0.7639 0.7276D =-1.2336 0 00 13.5147 00 0 3.7189• [U,T] = schur(A) esegue la fattorizzazione <strong>di</strong> Schur» [U,T]= schur(A)7


U =-0.8484 0.5205 0.09590.2394 0.5390 -0.80760.4721 0.6622 0.5819T =-1.2336 4.0663 -2.31030.0000 13.5147 -4.01600 0 3.7189Ricor<strong>di</strong>amo che una matrice è hermitiana se coincide con la sua aggiunta (A=A*)Il teorema <strong>di</strong> Schur appena enunciato ci permette <strong>di</strong> <strong>di</strong>mostrare un’importante proprietà dellematrici hermitiane: ogni matrice hermitiana è unitariamente <strong>di</strong>agonalizzabile e i suoi autovalorisono reali.Dire che ogni matrice hermitiana è unitariamente <strong>di</strong>agonalizzabile equivale ad affermare che i suoi<strong>autovettori</strong> sono ortonormali. Infatti, se poniamocon Av i=βv, alloraU=[ v 1, ……., v n],U* U=ILe matrici unitariamente <strong>di</strong>agonalizzabili sono più numerose delle matrici hermitiane.Per valutare la stabilità del calcolo è fondamentale il seguente teorema:Teorema <strong>di</strong> Bauer-Fike. Supponiamo che A appartenente a C nxn sia <strong>di</strong>agonalizzabile, cioè cheesista una matrice non singolare X tale cheX -1 AX=D= <strong>di</strong>ag(β 1,……., β n).Posto che α sia un autovalore <strong>di</strong> A+E, con E matrice <strong>di</strong> perturbazione si ha chemin (β appartente a σ(Α)) |β−α|≤ k 2(X)•║E║ 2dove σ(A) è lo spettro della matrice A e k 2 è il numero <strong>di</strong> con<strong>di</strong>zionamento in norma 2.Tale teorema ci consente <strong>di</strong> <strong>di</strong>re che se A è una matrice <strong>di</strong>agonalizzabile allora k 2(X) è il numero <strong>di</strong>con<strong>di</strong>zionamento del problema agli autovalori.Il teorema <strong>di</strong> Bauer-Fike riguarda il con<strong>di</strong>zionamento assoluto però soprattutto in presenza <strong>di</strong>autovalori molto piccoli si possono commettere errori relativi abbastanza significativi. Esso valesolo per matrici <strong>di</strong>agonalizzabili. In presenza <strong>di</strong> autovalori multipli <strong>di</strong>fettivi il problema <strong>degli</strong>autovalori può essere instabile.Consideriamo due esempi <strong>di</strong> autovalori instabili.Esempio 1Digitando sulla shell <strong>di</strong> Matlab» D=<strong>di</strong>ag(ones(10,1))+<strong>di</strong>ag(ones(9,1),1);» Q=orth(rand(10));» A=Q*D*Q’;La matrice A, così ottenuta, ha un unico autovalore pari a 1 con molteplicità 10. Se calcoliamo gli autovalori<strong>di</strong> A, con Matlab otteniamo:» eig(A)ans =0.97370.9787 + 0.0154i0.9787 - 0.0154i8


0.9918 + 0.0250i0.9918 - 0.0250i1.0081 + 0.0252i1.0081 - 0.0252i1.0214 + 0.0156i1.0214 - 0.0156i1.0265Gli autovalori calcolati con Matlab sono affetti da errore e se noi li rappresentiamo graficamente tramite ilcomando:» plot(eig(A),’o’)Notiamo che questi si allargano in un cerchio sul piano complesso.0.0250.020.0150.010.0050-0.005-0.01-0.015-0.02-0.0250.97 0.98 0.99 1 1.01 1.02 1.03 1.04Il numero <strong>di</strong> con<strong>di</strong>zionamento <strong>di</strong> tale matrice lo otteniamo tramite l’istruzione Matlab» [X , D] =eig(A);» cond(X)ans =2.4972e+014Esempio 2Consideriamo adesso la seguente matrice B» B = compan(poly(1:25))I suoi autovalori sono 1,2….25 ma anche in questo caso se noi li calcoliamo tramite l’ausilio deicoman<strong>di</strong> Matlab otteniamo:» eig(B)ans =24.7729 + 0.1993i24.7729 - 0.1993i9


23.2548 + 1.4065i23.2548 - 1.4065i21.2278 + 2.3812i21.2278 - 2.3812i18.8483 + 2.9600i18.8483 - 2.9600i16.3331 + 3.0389i16.3331 - 3.0389i13.9268 + 2.6390i13.9268 - 2.6390i11.7939 + 1.9057i11.7939 - 1.9057i9.9792 + 1.0075i9.9792 - 1.0075i8.63958.09276.99336.00045.00004.00003.00002.00001.0000» [X,D]=eig(A);» cond(X)ans =3.1995e+026Gli autovalori sono affetti da un forte errore infatti, se rappresentati graficamente, si spostano sulpiano complesso come in figura:43210-1-2-3-40 5 10 15 20 25Il con<strong>di</strong>zionamento della matrice X <strong>degli</strong> <strong>autovettori</strong>, che in base al Teorema <strong>di</strong> Bauer-Fike,esprime il con<strong>di</strong>zionamento del problema sarà:In questi due esempi, si nota come il problema <strong>degli</strong> autovalori, in base al tipo <strong>di</strong> matriceassegnata può essere estremamente instabile10


Algoritmo QRSe si desiderano tutti gli autovalori <strong>di</strong> una matrice, bisogna ricorrere a tecniche che consentonodapprima <strong>di</strong> ridurre la matrice ad una forma più semplice me<strong>di</strong>ante trasformazioni persimilitu<strong>di</strong>ne pervenendo a una forma triangolare superiore o <strong>di</strong>agonale: il calcolo <strong>degli</strong> autovalori<strong>di</strong>venta così notevolmente semplificato. Questa è la filosofia delle trasformazioni con matriciortogonali <strong>di</strong> Householder o Givens. Su tale filosofia si basa infatti il metodo QR e le sue varianti.Il metodo QR fa uso dei concetti <strong>di</strong> matrici simili e <strong>di</strong> decomposizione A=QR è l’algoritmo QR.Sia A una matrice quadrata <strong>di</strong> or<strong>di</strong>ne n. Utilizzando il metodo <strong>di</strong> Householder è possibilefattorizzare la matrice A come prodotto <strong>di</strong> due matrici Q ed R con Q unitaria (cioè Q T Q=QQ T = I ) edR triangolare superiore.Citiamo alcune cose:1. La matrice A ha quale sola particolarità <strong>di</strong> essere quadrata.2. Tale fattorizzazione non è unica (i segni delle componenti sulla <strong>di</strong>agonale della matrice Apossono essere scelti arbitrariamente).3. La routine Matlab qr effettua tale fattorizzazione.4. Se la matrice H è simile a K allora H e K hanno gli stessi autovalori. Si può vedere facilmenteche la relazione <strong>di</strong> similitu<strong>di</strong>ne è transitiva, cioè se H1 è simile ad H2 e H2 è simile ad H3 alloraH1 è simile ad H3.Lo schema <strong>di</strong> tale algoritmo è molto semplice. Si parte mettendo A=A0. Nella generica iterazione sieffettua la fattorizzazione QR della nuova matrice A k e si calcola la nuova iterata rimoltiplicando ifattori in or<strong>di</strong>ne inverso:1. A 0=A2. for k=0,1…fino alla convergenza1. fattorizza A k=Q kR k2. calcola A (k+1) =R kQ kTutte le matrici della successione sono simili e come tali hanno gli stessi autovalori.Se la matrice A R n×n è qualsiasi, ma regolare, e con autovalori tutti <strong>di</strong>stinti in modulo tali che|β 1| > ……> |β n|allora l’algoritmo QR converge a una matrice T triangolare superiore.Inoltre essendo A k+1T = Q kT A KT Q K, se la matrice A è simmetrica, lo saranno tutte le matrici dellasuccessione, con la conseguenza che T coinciderà necessariamente con una matrice <strong>di</strong>agonaleT=D=<strong>di</strong>ag(β 1, ……, β n)L’algoritmo fornisce anche un approssimazione della forma <strong>di</strong> Schur <strong>di</strong> A. Infattidove U k=Q 0…Q k, da cui segue cheA k+1=Q kT A kQ k=Q kQ k-1T A k-1Q k-1Q k=….=Q kT … Q 0T AQ 0…Q k=U kT AU klim → A k=T=U T AUcon U=∏ Q j.Se A è simmetrica si ottiene la sua fattorizzazione spettraleA=UDU TIn questo caso U è la matrice <strong>degli</strong> <strong>autovettori</strong>.Abbiamo visto che l’ipotesi per la convergenza è che tutti gli autovalori siano <strong>di</strong>stinti in modulo.Quest’ipotesi, apparentemente molto stingente, non crea gran<strong>di</strong> problemi perché anche quandonon è verificata esiste un modo per approssimare comunque gli autovalori.11


Supponiamo ad esempio che β=β. In base a tale ipotesi la successione delle matrici A k converge aduna matrice del tipo ∗∗∗∗∗ … …∗ … …3⋱∗∗⋮ In cui quasi tutto il triangolo inferiore si annulla tranne l’elemento in posizione (2,1).Il blocco costituito dagli elementi in posizione (1,1), (1,2), (2,1), (2,2), pur non stabilizzandosi haautovalori che tendono a β e β. Questo ci porta a <strong>di</strong>re che ogni volta che il metodo non converge èsufficiente calcolare separatamente gli autovalori <strong>di</strong> ciascuno dei blocchi <strong>di</strong>agonali che non sistabilizzano. Questo si può fare semplicemente calcolando gli zeri del polinomio caratteristicocorrispondente.Per ridurre il numero <strong>di</strong> iterazioni nell’applicazione dell’algoritmo QR, e quin<strong>di</strong> la complessitàcomputazionale, possiamo trasformare la matrice A, me<strong>di</strong>ante una trasformazione <strong>di</strong> similitu<strong>di</strong>ne,in una matrice con strutture <strong>di</strong> Hessemberg, cioè del tipo∗∗A =Si usa tale metodo perché è invariante per la trasformazione QR: se la matrice a cui vieneapplicato il metodo QR è <strong>di</strong> Hessemberg, tali saranno tutte le matrici della successione da essogenerata. Questo fatto accelera la convergenza del metodo, in quanto l’algoritmo deve azzeraresolo gli n-1 elementi sotto <strong>di</strong>agonale.Un altro vantaggio nel trasformare la matrice A in forma <strong>di</strong> Hessemberg è che si riducenotevolmente il costo computazionale <strong>di</strong> ogni iterazione del metodo QR.Per determinare la fattorizzazione QR <strong>di</strong> una matrice <strong>di</strong> Hessemberg è sufficiente applicare le n-1trasformazioni <strong>di</strong> Givens che annullano gli elementi sotto<strong>di</strong>agonali.Per passare in forma <strong>di</strong> Hessemberg sono necessarie n-2 opportune trasformazioni <strong>di</strong> Householderche dovranno essere applicate in modo simultaneo a destra e a sinistra <strong>di</strong> A per garantire lasimilitu<strong>di</strong>ne. Al primo passo in<strong>di</strong>chiamo con a1 un vettore che contiene tutti gli elementi dellaprima colonna della matrice A (1) =A aventi in<strong>di</strong>ce compreso tra 2 e n. H1 è la matrice elementare <strong>di</strong>Householder <strong>di</strong> or<strong>di</strong>ne n-1 che consente <strong>di</strong> sod<strong>di</strong>sfare l’uguaglianza H1*a1=k 1*e 1. H 1 è la matriceortogonale ottenuta orlando H1 fino a farle raggiungere la <strong>di</strong>mensione n.La matrice⋯⋱∗ ∗⋮∗ ∗ ∗ ∗⋯1 ∗ ∗A (2) :=H 1A (1) H 1= ⋮ ⋱ ⋮ 0∗⋯0 ∗ ∗è simile ad A e ha quin<strong>di</strong> gli stessi autovalori.Al passo i si ha la seguente matrice ∗ ∗ ∗ ∗ ∗ ∗1 ∗ ∗ ⋯ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ A (i) = ⋱ ⋮ − 1 ∗∗ ∗ ∗∗∗ ∗ ∗∗∗ ∗ ∗12


e il vettore in<strong>di</strong>viduato dagli elementi con due asterischi , contiene gli elementi della i-esimacolonna <strong>di</strong> A (i) con in<strong>di</strong>ce compreso tra i+1 e n.Se Hi è la matrice <strong>di</strong> Householder <strong>di</strong> or<strong>di</strong>ne n-i e H i è la matrice <strong>di</strong> <strong>di</strong>mensione n ottenuta orlandoHi, si haA (i+1) =H iA (i) H iIterando questo proce<strong>di</strong>mento otteniamo come matrice finaleA (n-1) =H n-2…….H 2H 1AH 1H2….H n-2Questa matrice è simile alla matrice iniziale A ed è in forma <strong>di</strong> Hessemberg: a tale matricepossiamo applicare l’algoritmo QR.Se la matrice ha tutti autovalori <strong>di</strong>stinti per arrestare l’iterazione dell’algoritmo QR dovremoverificare che gli elementi sotto la <strong>di</strong>agonale siano inferiori in modulo a una certa tolleranza T|a i+1,i|


endbeta=2*v(1)^2/(s+v(1)^2);v=v/v(1);endquin<strong>di</strong> QRbasicmethod.m che calcola la matrice triangolare T relativa a QR:function [T,hist]=QRbasicmethod(T_input,maxit)% Metodo QR per una matrice simmetrica tri<strong>di</strong>agonale "T_input".T=T_input;hist=sort(<strong>di</strong>ag(T));for index=1:maxit[Q,R]=qr(T);T=R*Q;% nuova matrice equivalente.hist=[hist sort(<strong>di</strong>ag(T))]; % ripristina gli elementi <strong>di</strong>agonali dell’in<strong>di</strong>ce <strong>di</strong> interazioneEsempio: data la seguente matrice, e sfruttando la precedente implementazione Matlab,» A= [ 2 3 4; 4 5 8; 9 3 11]A =2 3 44 5 89 3 11otteniamo la seguente matrice <strong>di</strong> Hessemberg:» houshess(A)ans =2.0000 4.8737 1.11699.8489 14.0928 -1.04120.0000 3.9588 1.907214


Teoremi <strong>di</strong> GershgorinCome abbiamo precedentemente detto, il calcolo <strong>di</strong> autovalori e <strong>autovettori</strong> è un problema moltodelicato, sia perché computazionalmente oneroso sia perché in alcuni casi è molto instabile eporta a una forte propagazione <strong>degli</strong> errori.Spesso non è in<strong>di</strong>spensabile conoscere tutti gli autovalori ma ci si può accontentare <strong>di</strong> unarisposta parziale consistente, come ad esempio conoscere solo alcuni autovalori o in<strong>di</strong>viduare unsottoinsieme del piano complesso C che contenga tutti gli autovalori, o che non li contenga. Irisultati <strong>di</strong> quest’ultimo tipo vengono detti teoremi <strong>di</strong> localizzazione e un esempio è fornito dalseguente enunciato:Sia ║•║ una norma consistente. Allora per ogni matrice quadrata A si harho(A)≤║A║Tale teorema afferma che un cerchio con centro nell’origine e raggio pari a una qualunque normamatriciale consistente <strong>di</strong> una matrice A contiene tutti gli autovalori <strong>di</strong> AI teoremi dei cerchi <strong>di</strong> Gershgorin consentono <strong>di</strong> localizzare gli autovalori <strong>di</strong> una matrice in modopiù stringente.Primo teorema <strong>di</strong> GershgorinData una matrice quadrata A <strong>di</strong> or<strong>di</strong>ne n, definiamo come cerchi riga:K i(r) = {z ∈ C : |z –a i ,j | ≤∑, | | } i=1….nallora gli autovalori <strong>di</strong> A sono tutti contenuti nell’unione dei cerchi riga <strong>di</strong> Gershgorinσ(Α)⊆ Κ (r) ιData una matrice quadrata A <strong>di</strong> or<strong>di</strong>ne n, definiamo come cerchi colonna:K j(c) = {z ∈ C : |z –a i,j| ≤∑, | | } j=1….nallora gli autovalori <strong>di</strong> A sono tutti contenuti nell’unione dei cerchi colonna <strong>di</strong> Gershgorinσ(Α)⊆ Κ (c) ιSe in<strong>di</strong>chiamo con C r e C c, rispettivamente, l’unione dei cerchi riga e dei cerchi colonna avendoC r ⊆ K (r) iC c ⊆ K (c) javremo cheσ(Α)⊆ Cr ∩ CcConsideriamo come esempio la seguente matrice AA=4 −1 11 3 −10 1 10 0 00 0 00 00 00 02 11 8i cui autovalori sono β 1 = 5 + √10, β 2 = β 3 = 3, β 4 = 2 e β 5 = 5 − √10.15


I cerchi riga sono:R1 = {z : |z − 4| ≤ 2},R2 = {z : |z − 3| ≤ 2},R3 = {z : |z − 1| ≤ 1},R4 = {z : |z − 2| ≤ 1},R5 = {z : |z − 8| ≤ 1} .Quelli colonna sono:C1 = {z : |z − 4| ≤ 1},C2 = {z : |z − 3| ≤ 2},C3 = {z : |z − 1| ≤ 2},C4 = {z : |z − 2| ≤ 1},C5 = {z : |z − 8| ≤ 1} .E’ chiaro osservare che gli autovalori stanno nell’insieme:R2 U R3 U R4 U R5poiché R2 = C2, R4 incluso in R2; C1,C4 incluso in C2 e R5 = C5.Secondo teorema <strong>di</strong> GershgorinSe l’unione C 1 <strong>di</strong> k cerchi <strong>di</strong> Gershgorin è <strong>di</strong>sgiunta dall’unione C 2 dei rimanenti n − k, cioè seC 1= K i C 2= K i C 1∩C 2=0allora k autovalori appartengono a C 1 e n −k appartengono a C 2 ossia i due insiemi sono <strong>di</strong>sgiunti.Terzo teorema <strong>di</strong> GershgorinSe la matrice <strong>di</strong> or<strong>di</strong>ne n è irriducibile e un autovalore β sta sulla frontiera dell’unione dei cerchi<strong>di</strong> Gershgorin, allora sta sulla frontiera <strong>di</strong> ogni cerchio <strong>di</strong> Gershgorin K i, i=1….n.Questo teorema è utile per <strong>di</strong>mostrare che le matrici <strong>di</strong> Poisson sono non singolari.Ricor<strong>di</strong>amo che una matrice si <strong>di</strong>ce irriducibile se non è riducibile e che una matrice <strong>di</strong> or<strong>di</strong>ne n ≥2 è riducibile se esiste una matrice <strong>di</strong> permutazione ∏ e un intero k, 0 < k < n, tale cheB =∏ ∏ T = 11 120 22 in cui A1,1 ∈ Ck×k , A 12,2 ∈ C (n−k)×(n−k) .Ve<strong>di</strong>amo ora in Matlab quali sono effettivamente gli autovalori della matrice A:>> A = [15 -2 2; 1 10 -3; -2 1 0]A =15 -2 21 10 -3-2 1 0A conferma <strong>di</strong> quanto stabilito dai primi due teoremi <strong>di</strong> Gershgorin otteniamo che gli autovalori <strong>di</strong>A sono:>> eig(A)ans =0.512114.102610.3854>>Per scrivere una funzione Matlab, che consenta la rappresentazione <strong>di</strong> tali cerchi <strong>di</strong> Gershgorinbasta selezionare i centri e i raggi per rappresentare poi le circonferenze corrispondenti ai cerchiin modo parametrico16


Metodo delle potenzeIl metodo delle potenze ci permette <strong>di</strong> determinare un autovalore β 1 <strong>di</strong> modulo massimo <strong>di</strong> unamatrice A e l’autovettore ad esso corrispondente. Questo metodo converge se sono verificate treipotesi:• A è <strong>di</strong>agonalizzabile;• L’autovalore <strong>di</strong> modulo massimo è separato dagli altri ossia|β 1|>|β 2|>…..>|βn|;• Il vettore iniziale x 0 ha una componente non nulla lungo l’autovettore v 1, corrispondente aβ 1;Il metodo delle potenze dato un vettore iniziale x 0 ci consente <strong>di</strong> calcolare la successione <strong>di</strong> vettoriil cui termine k-esimo èX k=A kx 0Essendo A una matrice <strong>di</strong>agonalizzabile, esiste una base <strong>di</strong> <strong>autovettori</strong> e quin<strong>di</strong> il vettore inizialepuò essere visto come una loro combinazione lineareX 0=∑ α iv idove Av i=β iv i, i=1,…..,n. Sfruttando la relazione precedente si ottieneapplicando la terza ipotesi (α≠0)x k=A kx (0) =∑ α iA k v i = ∑ α iβ ik v ix (k) =α 1β1k v 1 + ∑ α iβ ik v i = α 1β1k (v 1 + ∑ (α i/α 1)(β i/β 1) k v i)Per la seconda ipotesi, il rapporto (β i/β 1) k converge a 0 per valori <strong>di</strong> k tendenti a infinito. Sullabase <strong>di</strong> ciò, possiamo <strong>di</strong>re che il vettore x k tende ad essere parallelo all’autovettore v 1, o meglio acoincidere con esso.Per aumentare la stabilità del calcolo e <strong>di</strong>minuire il costo computazionale <strong>di</strong> ogni iterazionepotremo valutare x k comex k=Ax (k-1)Tale proce<strong>di</strong>mento porta a due gravi problemi: underflow e overflow: la norma <strong>di</strong> β k converge azero quando |β 1|1.Per evitare questi tipi <strong>di</strong> problemi possiamo normalizzare il vettore x k ad ogni iterazione, perevitare che la sua norma cresca o decresca eccessivamente, come seguex k=Aq (k-1)q k =x k /║x k ║Ad ogni passo l’autovalore β 1 può essere approssimato tramite quoziente <strong>di</strong> Rayleighβ 1k =((q (k) ) T Aq (k) )/((q (k) ) T q (k) )Se applichiamo il metodo delle potenze con normalizzazione in norma due, posso trascurare ildenominatore.Dobbiamo inoltre fissare un criterio <strong>di</strong> stop del tipo|β 1K – β 1(k-1) |< T |β 1k |dove T è la tolleranza, che dev’essere maggiore <strong>di</strong> zero, e N è il numero massimo <strong>di</strong> iterazioni.18


L’algoritmo che descrive i metodo delle potenze con normalizzazione in norma 2 è il seguente:1. Scegli x 0,T e N2. q 0=x 0/║x 0║ 23. k=0;4. β 0=0;5. repeat1. k=k+1;2. x k=Aq (k-1)3. q k =x k /║x k ║ 24. β k=(q k ) T Aq k6. until |β k -β (k-1) |Nx 0 è un vettore iniziale che è conveniente sia costituito da numeri reali casuali per evitare <strong>di</strong>violare la terza ipotesi.Se le ipotesi sono verificate β k converge all’autovalore <strong>di</strong> modulo massimo e q k al corrispondenteautovettore normalizzato.Implementiamo in Matlab il metodo delle potenzefunction [lambda1, x1, niter, err]=power_basic(A,z0,toll,nmax)% INPUT:% A : MATRICE DI CUI VOGLIAMO CALCOLARE L'AUTOVALORE DI MASSIMO MODULO.% z0 : VETTORE INIZIALE (NON NULLO).% toll: TOLLERANZA.% nmax: NUMERO MASSIMO DI ITERAZIONI.%% OUTPUT:% lambda1 : VETTORE DELLE APPROSSIMAZIONI DELL'AUTOVALORE DI MASSIMO MODULO.% x1 : AUTOVETTORE RELATIVO ALL'AUTOVALORE DI MASSIMO MODULO.% niter : NUMERO DI ITERAZIONI.% err : VETTORE DEI RESIDUI PESATI RELATIVI A "lambda1".q=z0/norm(z0);q2=q;err=[];lambda1=[];res=toll+1;niter=0;z=A*q;while (res >= toll & niter


dove θβ k è l’angolo formato tra (un’approssimazione del)l’autovalore destro x1 e sinistro y1associati a lam.Esempio 1Testiamo il co<strong>di</strong>ce relativamente al calcolo dell’autovalore <strong>di</strong> massimo modulo <strong>di</strong> =−15.5 7.5 1.5−51 25 3−25.5 7.5 11.5=1 2 32 5 67 9 3*10 0 00 10 00 0 1*1 2 32 5 67 9 3^-1La matrice A è <strong>di</strong>agonalizzabile e ha autovalori β 1=10, β 2=10, β 3=1.Si può vedere che una base <strong>di</strong> <strong>autovettori</strong> 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 quin<strong>di</strong> il metodo delle potenze applicato ad A, e avente qualepunto iniziale z 0 può essere utilizzato per il calcolo dell’autovalore <strong>di</strong> massimo modulo <strong>di</strong> A, poichéα 1 = 7/6 ≠ 0.Dalla shell <strong>di</strong> Matlab>> S=[1 2 3; 2 5 6; 7 9 3];>> D=<strong>di</strong>ag([10 10 1]);>> A=S*D*inv(S)A =-15.5000 7.5000 1.5000-51.0000 25.0000 3.0000-25.5000 7.5000 11.5000>> z0=[1 1 1]’;>> toll=10^(-8);>> nmax=10;>> format short e;>> [lambda1, x1, niter, err]=power_basic(A,z0,toll,nmax)lambda1 =1.1587e+0011.0138e+0011.0014e+0011.0001e+0011.0000e+0011.0000e+0011.0000e+0011.0000e+0011.0000e+0011.0000e+001x1 =-2.8583e-001-9.1466e-001-2.8583e-001niter =10err =2.2466e+0002.1028e-0012.0934e-00220


2.0925e-0032.0924e-0042.0924e-0052.0924e-0062.0924e-0072.0924e-0082.0924e-009>>Dall’analisi della quantità err, che consiste in un particolare residuo pesato, si nota chelaconvergenza è abbastanza veloce.Una questione sorge spontanea: cosa sarebbe successo se avessimo utilizzato l’algoritmo senzanormalizzazione ossia se al posto della funzione power_basic avessimo usato quella power_methoddefinita come segue:function [lambda,v]=power_method(A,x0,maxit)v=x0;for index=1:maxitv_old=v;v=A*v_old;lambda=(v_old'*v)/(v_old'*v_old);endProviamo il test, facendo iterare il metodo prima 5, poi 100 volte e alla fine 1000 volte(si noti ilsettaggio della variabile maxit relativa al numero <strong>di</strong> iterazioni da compiere):>> x0=[1 1 1]’x0 =111>> A=[-15.5 7.5 1.5; -51 25 3; -25.5 7.5 11.5]A =-15.5000 7.5000 1.5000-51.0000 25.0000 3.0000-25.5000 7.5000 11.5000>> [lambda,v]=power_method(A,x0,5)lambda =10.0014v =1.0e+005 *-0.8333-2.6666-0.8333>> [lambda,v]=power_method(A,x0,100)lambda =10.0000v =1.0e+100 *-0.8333-2.6667-0.8333>> [lambda,v]=power_method(A,x0,1000)lambda =21


NaNv =NaNNaNNaNLa ragione <strong>di</strong> tali risultati è facilmente spiegabile. Per k relativamente piccolo si ha A tk ≈ 10 tk equin<strong>di</strong> per s ≥ k ts ≈ A s−k tk ≈ 10 A s−k−1 tk ≈ ≈ 10 s−k tk da cui ║t s║ 2≈ 10 (s-k) ║t s║ 2 : questocausa problemi <strong>di</strong> overflow nell’applicazione dell’algoritmo <strong>di</strong> base.Esempio 2Proviamo un test <strong>di</strong>verso, questa volta con la matrice (<strong>di</strong>agonalizzabile) = 1 20 −1avente autovalori β 1 = 1 e β 2 = −1 e <strong>autovettori</strong> linearmente in<strong>di</strong>pendenti (1, 0),(−1, 1). Qualevettore iniziale poniamo x 0 = (1,3) = 4 (1,0)+3 (−1,1) e quin<strong>di</strong> il metodo delle potenze , partendo dax 0, può essere sicuramente applicato alla matrice A.Non è detto che il metodo converga in quanto, pur essendo β 1 ≠ β 2, si ha |β 1| = |β 2| = 1.Dalla shell <strong>di</strong> Matlab:>> A=[ 1 2; 0 -1]A =1 20 -1>> [lambda1, x1, niter, err]=power_basic(A,[1; 3],10^(-8),15)lambda1 =-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001-3.4483e-002-2.0000e-001x1 =3.1623e-0019.4868e-001niter =16err =4.4567e-0012.4000e+0004.4567e-0012.4000e+0004.4567e-0012.4000e+0004.4567e-00122


2.4000e+0004.4567e-0012.4000e+0004.4567e-0012.4000e+0004.4567e-0012.4000e+0004.4567e-0012.4000e+000>>Dall’analisi del residuo pesato è chiaro che il metodo non converge, e come anticipato il motivo èla presenza <strong>di</strong> autovalori <strong>di</strong>stinti aventi modulo massimo identico.Esempio 3Per terminare, ve<strong>di</strong>amo il caso della matrice <strong>di</strong>agonalizzabile (avente autovalori <strong>di</strong>stinti)A = 1 20 10in cui il metodo funziona rapidamente, in quanto esiste un solo autovalore <strong>di</strong> modulo massimo,uguale a 10.>> A=[1 2; 0 10]A =1 20 10>> [lambda1, x1, niter, err]=power_basic(A,[1; 3],10^(-8),15)lambda1 =9.9779e+0009.9979e+0009.9998e+0001.0000e+0011.0000e+0011.0000e+0011.0000e+0011.0000e+001x1 =2.1693e-0019.7619e-001niter =8err =9.6726e-0029.7529e-0039.7610e-0049.7618e-0059.7619e-0069.7619e-0079.7619e-0089.7619e-009Si osservi che il metodo termina in quanto l’errore pesato err è minore della tolleranzatol l = 10−8.23


Metodo delle potenze inverseIl metodo delle potenze inverse è un metodo utile per determinare l’autovalore <strong>di</strong> modulo minimo<strong>di</strong> una matrice non singolare.Essendo σ(Α)= {β 1,….,β n}σ(Α −1 )={β 1-1 ,…..,β n-1 }, si può applicare l’algoritmo alla matriceinversa A -1 per approssimare il suo autovalore <strong>di</strong> modulo massimo β n-1 . Quest’approssimazione èfattibile sulla base <strong>di</strong> alcune ipotesi:1. A dev’essere <strong>di</strong>agonalizzabile;2. X 0 deve avere componente non nulla rispetto a v n3. 1/|β i| > 1/|β n| con i=1,…..,n-1Dobbiamo risolvere il sistema Ax k =x (k-1) . Per ridurre la complessità computazionale è convenientefattorizzare la matrice A all’inizio del processo e risolvere ad ogni passo due sistemi triangolari.L’algoritmo che ci descrive il metodo delle potenze inverse è il seguente:1. Scegli x 0, T e N2. q (0) =x (0) /║x (0) ║ 23. fattorizza A=LU4. k=05. β (0) =06. repeat1. k=k+12. risolvi Ly=q (k-1)3. risolvi Ux k =y4. q k =x k /║x k ║ 25. β k =(β k ) T Aq k7. until |β k -β (k-1) Nse sono verificate le ipotesi <strong>di</strong> convergenza β k tende a β n-1 per k che tende a infinito.Ricor<strong>di</strong>amo che se β è autovalore <strong>di</strong> A allora Ax = βx ----> (A−µI )x = βx −µx = (β−µ)x e quin<strong>di</strong> β−µè autovalore <strong>di</strong> A −µI .Il metodo delle potenze inverse applicato a A−µI calcola il minimo autovalore σ = β−µ in modulo <strong>di</strong>A−µI cioè il σ che rende minimo il valore <strong>di</strong> |σ| = |β i −µ|, dove β i sono gli autovalori <strong>di</strong> A. Quin<strong>di</strong>essendo β i = σ i −µ si ottiene pure il β i più vicino a µ.Una possibile implementazione del metodo delle potenze inverse in Matlab è la seguente:function [lambda, x, niter, err]=invpower(A,z0,mu,toll,nmax)% DATO UN VALORE mu, SI CALCOLA L'AUTOVALORE "lambda_mu" PIU' VICINO A mu.% INPUT:% A : MATRICE DI CUI VOGLIAMO CALCOLARE L'AUTOVALORE "lambda_mu".% z0 : VETTORE INIZIALE (NON NULLO).% mu : VALORE DI CUI VOGLIAMO CALCOLARE L'AUTOVALORE PIU' VICINO.% toll: TOLLERANZA.% nmax: NUMERO MASSIMO DI ITERAZIONI.%% OUTPUT:% lambda : VETTORE DELLE APPROSSIMAZIONI DELL'AUTOVALORE DI MINIMO MODULO.% x : AUTOVETTORE RELATIVO ALL'AUTOVALORE DI MINIMO MODULO.% niter : NUMERO DI ITERAZIONI.% err : VETTORE DEI RESIDUI PESATI RELATIVI A "lambda".%n=max(size(A));M=A-mu*eye(n);[L,U,P]=lu(M);q=z0/norm(z0);q2=q';err=[];lambda=[];res=toll+1;24


niter=0;while (res >= toll & niter 5e-2)res=norm(z-lam*q)/costheta;err=[err; res];lambda=[lambda; lam];else<strong>di</strong>sp('\n \t [ATTENZIONE]: AUTOVALORE MULTIPLO');break;endx=q;Forniamo ora alcune spiegazioni del co<strong>di</strong>ce 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 suoversore q k , e σ k è immagazzinato in lam;3. Similmente al metodo <strong>di</strong>retto si effettua il prodotto scalare <strong>di</strong> un’autovalore sinistro con unodestro.Applichiamo il metodo delle potenze inverse per il calcolo dell’autovalore più piccolo in modulodella matrice =−15.5 7.5 1.5−51 25 3−25.5 7.5 11.5=1 2 32 5 67 9 3*10 0 00 10 00 0 1*1 2 32 5 67 9 3^-1Come visto la matrice A è quin<strong>di</strong> <strong>di</strong>agonalizzabile, ha autovalori 10, 10, 1 e relativi <strong>autovettori</strong> è(1,2,7), (2,5,9), (3,6,3) formanti una base <strong>di</strong> R3.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 quin<strong>di</strong> il metodo delle potenze inverse applicato ad A, e avente qualepunto iniziale z 0 può essere utilizzato per il calcolo dell’autovalore <strong>di</strong> minimo modulo <strong>di</strong> A.» 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 11.5]A =-15.50000000000000 7.50000000000000 1.50000000000000-51.00000000000000 25.00000000000000 3.00000000000000-25.50000000000000 7.50000000000000 11.5000000000000025


» [lambda, x, niter, err]=invpower(A,z0,mu,toll,nmax)lambda =0.390161153519930.942375639412680.994269229368540.999427237766560.999942726923150.999994272723780.999999427272700.999999942727280.99999999427273x =0.408248290538090.816496580853500.40824829053809niter =9err =0.815352165073770.083581012890620.008381262583960.000838360788910.000083838427120.000008383866200.000000838386850.000000083838680.00000000838387>>La convergenza è lineare (come si intuisce dalle approssimazioni contenute nel vettore lambda).Per vederlo, dalla shell <strong>di</strong> Matlab calcoliamo l’errore assoluto/relativo relativo all’autovalore 1:>> s=1-lambdas =0.609838846480070.057624360587320.005730770631460.000572762233440.000057273076850.000005727276220.000000572727300.000000057272720.0000000057272726

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!