12.07.2015 Views

confronto fattorizzazioni - Università degli studi di Cagliari.

confronto fattorizzazioni - Università degli studi di Cagliari.

confronto fattorizzazioni - Università degli studi di Cagliari.

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

pessimistica in quanto vale per ogni possibile termine noto b.L'errore inerente è in<strong>di</strong>pendente dal metodo utilizzato per la risoluzione.Errore analitico. I meto<strong>di</strong> <strong>di</strong>retti in aritmetica esatta danno soluzione esatta; non siha quin<strong>di</strong> errore analitico.Nel caso dei meto<strong>di</strong> iterativi occorre invece troncare la generazione della successione<strong>di</strong> vettori tramite un opportuno criterio <strong>di</strong> arresto tale da approssimare il limite edando così origine ad un errore analitico.Errore algoritmico. L'errore algoritmico è l'errore indotto sul risultato dall'usodell'aritmetica finita. Anche un'operazione fra due numeri macchina può avere comerisultato un numero non <strong>di</strong> macchina; tale numero risultante necessiterà <strong>di</strong> essereapprossimato con un numero macchina e tale approssimazione avrà ovviamente delleconseguenze sui calcoli successivi. Tale tipo <strong>di</strong> errore è connesso alla cosiddettastabilità del metodo <strong>di</strong> calcolo.Un elemento importante è rappresentato dal costo computazionale.Il costo computazionale si <strong>di</strong>stingue fra il costo <strong>di</strong> memorizzazione e il costo intermini <strong>di</strong> operazioni moltiplicative. Per quanto concerne il costo <strong>di</strong> memorizzazionela <strong>di</strong>fferenza può essere significativa nel caso delle matrici sparse (matrici il cuinumero <strong>di</strong> elementi <strong>di</strong>versi da zero è O(n) anziché n 2 ). Infatti le operazioni <strong>di</strong>fattorizzazione possono far aumentare il numero <strong>di</strong> elementi non nulli, dando luogoalla necessità <strong>di</strong> pre<strong>di</strong>sporre altro spazio <strong>di</strong> memoria per la loro memorizzazione;mentre i meto<strong>di</strong> iterativi visti non alterano la struttura della matrice ed eventualmentepuò essere caricata in memoria una sola riga <strong>di</strong> A per volta. Per quanto concerne ilcosto in termini <strong>di</strong> operazioni <strong>di</strong> tipo moltiplicativo si ha che è dell'or<strong>di</strong>ne <strong>di</strong> n 3 /3 perla fattorizzazione LU e pari a n 2 per ogni iterazione nei meto<strong>di</strong> iterativi. Nel caso <strong>di</strong>convergenza in meno <strong>di</strong> n passi il vantaggio può essere rilevante.1.1.1 La stabilità dei meto<strong>di</strong> <strong>di</strong>retti per sistemi lineariIl con<strong>di</strong>zionamento intrinseco del problema, se valutato in termini <strong>di</strong> errore relativo, èlegato al cosiddetto numero <strong>di</strong> con<strong>di</strong>zionamentok * (A)=||A|| * ||A -1 || * della matrice A rispetto alla norma ||•|| *Se si perturba solo il termine noto b, la soluzione x+δx del sistemaA(x+δx) = b+δb è affetta da una perturbazione relativa∥δx∥⩽K (A)∥δb∥∥x∥ ∥b∥3


Nel caso più generale, si ha una espressione più complessa ma conclusioniqualitativamente simili.La stabilità dei meto<strong>di</strong> <strong>di</strong>retti tipo MEG o fattorizzazione LU aumenta decisamentecon la pivotazione, ed è migliore per meto<strong>di</strong> quali le <strong>fattorizzazioni</strong> QR e <strong>di</strong>Cholesky. E’ comunque <strong>di</strong>fficile risolvere accuratamente sistemi malcon<strong>di</strong>zionati in<strong>di</strong>mensione alta. La valutazione a posteriori della accuratezza tramite il residuo<strong>di</strong>pende anch’essa dal con<strong>di</strong>zionamento del sistemaSistemi <strong>di</strong> gran<strong>di</strong> <strong>di</strong>mensioni, specie se malcon<strong>di</strong>zionati, si risolvono spesso in modopiù efficiente ed accurato con meto<strong>di</strong> iterativi.1.2 FATTORIZZAZIONE DI CHOLESKYSia la matrice A una matrice simmetrica definita positiva 1 (ve<strong>di</strong> Teorema <strong>di</strong> Cholesky).La fattorizzazione per una matrice <strong>di</strong> questo tipo risulta semplificata per due ragioni:non è necessario alcun pivoting ed è possibile operare solo sul triangolo inferioredella matrice, essendo quello superiore il trasposto dell'inferiore, essendo la matrice Asimmetrica. Pertanto, la fattorizzazione della matrice consisterà nel prodotto <strong>di</strong> duematrici R e R T , la prima triangolare inferiore, la seconda trasposta della prima. Ladeterminazione <strong>degli</strong> elementi della matrice R={R ij} avviene nel seguente modo:r ij= 1 i−1(ar ij−∑ r kir kj),ii k =1i< jj−1r jj =(a jj −∑ r kjk =112 )2 , i= j.La matrice deve risultare positiva, altrimenti si darebbe luogo a delle ra<strong>di</strong>ci r jjcomplesse che comporterebbero l' impossibilità <strong>di</strong> realizzazione dell'algoritmo.Una volta calcolato R si procede alla risoluzione dei due sistemi triangolari:Ry=be R T x=y;In matlab la fattorizzazione <strong>di</strong> Cholesky si realizza con il comando chol1Il teorema <strong>di</strong> Cholesky afferma che una matrice simmetrica è definita positiva se e solo se esiste una e una sola matrice Rtriangolare inferiore con elementi <strong>di</strong>agonali positivi tale che A=R T R.4


%fattorizzazione <strong>di</strong> Cholesky>>n=5;>>A=rand(n);>>R=chol(A);Attraverso il comando chol inoltre si può sapere se A è definita positiva attraverso unflag p che risulta essere a zero:[R,p]=chol(A);Come scritto sopra, se A non è definita positiva e la funzione chol viene richiamatacon un solo argomento in uscita, verrà visualizzato un messaggio <strong>di</strong> errore:>>A=[1 2 3;2 5 4;3 4 8]>>R=chol(A)??? Error using ==> cholMatrix must be positive definite.Usando due argomenti in uscita, non viene segnalato alcun errore ma risulta p=3.>> [R,p]=chol(A)>>p=3Il comando chol rappresentato in precedenza può essere anche sostituito da unalgoritmo che fa uso <strong>di</strong> un'altra funzione anziché della funzione chol <strong>di</strong> matlab. Talealgoritmo può essere implementato per righe o per colonne, a seconda dell'or<strong>di</strong>ne incui vengono memorizzati gli elementi <strong>di</strong> una matrice nel linguaggio <strong>di</strong>programmazione adottato. Io ho scelto <strong>di</strong> implementare l'algoritmo per colonne:function [R] = cholesky(A)% La funzione “cholesky” ha come input la matrice%originaria A e restituisce in output la matrice R%fattorizzata.5


[n,n] = size(A);R = zeros(n,n); %La matrice R è inizialmente una matrice <strong>di</strong> zeri <strong>di</strong> <strong>di</strong>mensione n x n.for j = 1:nif (A(j,j)-sum(R(1:j-1,j).^2)) < 0 % Se l'argomento tra parentesi è minore <strong>di</strong> zero la%matrice A non è definita positiva e si genera un%messaggio d'errore.error ('La matrice A non è definita positiva')elsefor i = 1:j-1R(i,j)= (A(i,j)- sum(R(1:i-1,i).*R(1:i-1,j)))/R(i,i); %Si applica la formula scritta sopra per%ricavare gli elementi della matrice R in%funzione a quelli della matrice AendR(j,j) = sqrt(A(j,j)- sum(R(1:j-1,j).^2));endendPosso confrontare i due algoritmi sopra scritti, quello da me implementato e quello <strong>di</strong>Matlab, applicandoli alla risoluzione <strong>di</strong> un sistema lineare <strong>di</strong> equazioni. Per il loro<strong>confronto</strong> calcolo la norma due dell'errore della <strong>di</strong>fferenza delle due soluzioni, unadata dall'utilizzo del comando Matlab “chol” e l'altra data dall'algoritmoimplementato da me, per verificare il comportamento <strong>di</strong>fferente dei due algoritmi.Lo <strong>stu<strong>di</strong></strong>o è stato effettuato considerando tre <strong>di</strong>verse grandezze <strong>di</strong> matrici, in modo dapoter verificare il comportamento dei due meto<strong>di</strong> al variare della <strong>di</strong>mensionematriciale.%CONFRONTO FATTORIZZAZIONI CHOLESKY: UTILIZZO ALGORITMO MATLAB CHOL E%ALGORITMO IMPLEMENTATO6


for n = 1:10;A = rand(n);A = A'*A;sol = ones(n,1);b = A*sol;%Comando "chol" <strong>di</strong> matlabR = chol(A);y1 = R'\b;x1 = R\y1;% Errore usando usando la funzione "chol" <strong>di</strong> Matlaberrore1(n) = norm(x1 – sol);%Comando "cholesky" implementato attraverso il mio algoritmo personalizzatoR=cholesky(A);y2=R'\b;x2=R\y2;% Errore usando usando la funzione "chol" <strong>di</strong> Matlaberrore2(n) = norm(x2 - sol);end7


Per la <strong>di</strong>mensione matriciale che varia tra 1 e 10 si può notare che i due meto<strong>di</strong> sonoentrambi efficienti e non si <strong>di</strong>scostano in maniera significativa tra loro. L'errore è inscala logaritmica e ha una scala <strong>di</strong> variazione compresa tra 10 -15 e 10 -11 .8


Con una matrice <strong>di</strong> <strong>di</strong>mensioni maggiori (1-50), i due meto<strong>di</strong> rimangono pressochécoincidenti, tuttavia l'errore cresce significativamente, fino a 10 -8 . E' da notare che incorrispondenza circa dell'ascissa 43 gli errori tra i due meto<strong>di</strong> <strong>di</strong>fferiscono per più <strong>di</strong>un or<strong>di</strong>ne <strong>di</strong> grandezza, a vantaggio dell'algoritmo facente uso del comando chol <strong>di</strong>matlab.Con una matrice compresa tra 1 e 100 l'errore cresce fino a raggiungere il valore <strong>di</strong>10 -6 .Valutiamo ora i tempi <strong>di</strong> elaborazione delle soluzioni in funzione delle <strong>di</strong>mensionimatriciali:9


Il metodo <strong>di</strong> Cholesky implementato con la funzione propria <strong>di</strong> Matlab risulta moltopiù efficiente a partire da matrici <strong>di</strong> piccole <strong>di</strong>mensioni. Si vede infatti che vi è una<strong>di</strong>fferenza tra i due algoritmi, che tende ad aumentare con l'aumentare della<strong>di</strong>mensione della matrice. Gli andamenti dei due algoritmi sono pressoché gli stessi,tranne che per un andamento leggermente più lineare dell'algoritmo proprio <strong>di</strong> matlaball'aumentare delle <strong>di</strong>mensioni.Con l'aumento delle <strong>di</strong>mensioni delle matrici, il tempo varia notevolmente tra i duealgoritmi implementati, i quali ad<strong>di</strong>rittura <strong>di</strong>fferiscono <strong>di</strong> due or<strong>di</strong>ni <strong>di</strong> grandezza: 10 -2sec. per l'algoritmo <strong>di</strong> matlab e 10 -4 sec. per l'algoritmo implementato da me.10


Anche per matrici comprese tra 0 e 100 i tempi si mantengono molto bassi tuttavia<strong>di</strong>fferiscono notevolmente per or<strong>di</strong>ne <strong>di</strong> grandezza. In questo caso l'algoritmo <strong>di</strong>Matlab è almeno due or<strong>di</strong>ni <strong>di</strong> grandezza più veloce.11


1.3 LA FATTORIZZAZIONE QRUn'alternativa alla fattorizzazione <strong>di</strong> Cholesky è la fattorizzazione QR.La procedura <strong>di</strong> fattorizzazione QR è una procedura che consiste nella scomposizionedella matrice A in due matrici Q ed R, in cui Q è una matrice ortogonale (ossia taleche QQ T = Q T Q = I) e R è una matrice triangolare superiore.Le relazioni che legano gli elementi <strong>di</strong> A a quelli della matrice prodotto QR sono leseguenti:na ij=∑j=1kq ijr jk=∑ q ijr jkj=1in quanto r jk = 0 per j= k+1,...,n essendo R triangolare superiore.Esistono <strong>di</strong>versi meto<strong>di</strong> per la scomposizione della matrice in forma QR , in questatesina mi occuperò della fattorizzazione <strong>di</strong> Householder e <strong>di</strong> quella <strong>di</strong> Givens,mettendone in relazione i punti in comune e le <strong>di</strong>fferenze fondamentali.Una volta ottenuta la fattorizzazione QR con i meto<strong>di</strong> sopra citati si può passare allarisoluzione del sistema lineareAx=b ,procedendo allo stesso modo della fattorizzazione LU.Più precisamente, si ottiene che si devono risolvere i due sistemi lineariQc=b,Rx=c.Il vantaggio dell'introduzione della matrice Q al posto della matrice A originaria,consiste nel fatto che, essendo Q ortogonale, per unicità dell'inversa, Q -1 = Q t ,cosicché il vettore c = Q -1 b viene ottenuto semplicemente considerando il prodottomatrice-vettore c = Q T b (e non la risoluzione del sistema lineare).Per quanto riguarda il sistema Rx = c, essendo R una matrice triangolare superiore,esso viene risolto con la procedura <strong>di</strong> risoluzione backward, come nel caso dellafattorizzazione LU.12


1.3.1 FATTORIZZAZIONE DI HOUSEHOLDERLa fattorizzazione <strong>di</strong> Householder consiste nella decomposizione della matrice A indue matrici Q ed R a partire dalle matrici elementari <strong>di</strong> Householder.Una matrice elementare <strong>di</strong> Householder reale ha la seguente forma:H=I−2 w w T ,w∈R n ,∥w∥=1,H è una matrice ortogonale e simmetrica.Questo metodo presenta alcuni vantaggi pratici, in particolare esso non richiede ilcalcolo dell’inversa <strong>di</strong> una matrice triangolare superiore.Poiché ogni trasformazione <strong>di</strong> Householder è ortogonale, ci basta far vedere cheesiste un prodotto <strong>di</strong> matrici del tipo H(x i ; e j ) che trasforma A in una matricetriangolare superiore con entrate sulla <strong>di</strong>agonale principale tutte positive. A questopunto, l’unicità della fattorizzazione garantisce che quanto abbiamo ottenuto siaeffettivamente la decomposizione QR cercata, che è detta matrice <strong>di</strong> Householder(alternativamente riflessione <strong>di</strong> Householder, trasformazione <strong>di</strong> Householder)associata a w.H 1 a 1(1)=k 1 e 1.Dobbiamo creare una successione <strong>di</strong> matrici A (i) , con i=1,...n in modo che A (n) siatriangolare superiore. Moltiplichiamo la matrice <strong>di</strong> Householder H 1 a sinistra dellamatrice A (1) e otteniamo:A (2) =H 1 A (1) =[a 1(2)a 2(2)… a n(2)]in cuia1(2)=k1e1,mentre i restanti elementiaj(2)=H 1 aj(1) con j=2,...,n.La matrice A(2) ha la seguente struttura:A (2) =(k(2) (2)1 a 12 ⋯ a 1n(2) (2)0 a 22⋯ a 2n⋮ ⋮ ⋮(2)0 a n2 ⋯ a nn(2))= (k 10Tv 1 Â , 13


 (2)con 0 vettore colonna e una sottomatrice <strong>di</strong> <strong>di</strong>mensione appropriata cheandremo a sottoporre alle stesse operazioni a cui abbiamo sottoposto H 1 , dopo averla“orlata” con una riga e una colonna <strong>di</strong> una matrice identità per farle raggiungere la<strong>di</strong>mensione n x n e ripetiamo il proce<strong>di</strong>mento come sopra, fino ad arrivare al genericopasso i in cui avremo la matrice nella forma:1• ⋯ ⋯ ⋯ •0 ⋱ ⋱ ⋮A =(k (i) ⋮ ⋱ k i−1 • ⋯ •⋮ 0⋮ ⋮  (i)0 ⋯ 0)=( A (i)11A 12(i)) 0 Âin cui gli elementi in<strong>di</strong>cati con • non verranno più mo<strong>di</strong>ficati e la sottomatrice (i)ha la forma: (i) =[â i(i)(i)a i+1̂⋯ â n (i) ]A questo punto poniamo:Ĥ i â i (i) =k ie 1quin<strong>di</strong> orliamo Ĥ i con i-1 righe e colonne della matrice identità fino ad ottenere:1• ⋯ ⋯ ⋯ •A =(k )0 ⋱ ⋱ ⋮(i+1) ⋮ ⋱ k i • ⋯ •⋮ 0⋮ ⋮  (i+1)0 ⋯ 0In<strong>di</strong>chiamo con(H n H n-1 H 1 )A = R ndove H = (H n H n-1 H 1 ) è una matrice ortogonale, mentre R n è una matrice triangolare14


superiore con valori positive sulla <strong>di</strong>agonale principale.Moltiplicando per Q = H T = H -1 l’uguaglianza <strong>di</strong> cui sopra si giunge ora allafattorizzazioneA= QRQuanto scritto sopra è valido per matrici quadrate, che sono quelle che ho trattato inquesta tesina. Per le matrici rettangolari occorre effettuare un passo in aggiuntivo perazzerare gli elementi della n-esima colonna della matrice A.In matlab la fattorizzazione QR <strong>di</strong> una matrice A me<strong>di</strong>ante l'algoritmo <strong>di</strong> Householdersi ottiene me<strong>di</strong>ante il comando:[Q,R]=qr(A)e attraverso questa è possibile trovare la soluzione <strong>di</strong> un sistema lineare, attraverso iseguenti passi:[Q,R]=qr(A);c=Q'*b;x=R\c;Come già fatto per il caso dell'algoritmo <strong>di</strong> Cholesky, possiamo sviluppare unalgoritmo personale <strong>di</strong> Householder e lo mettiamo in <strong>confronto</strong> con quello proprio <strong>di</strong>matlab. Anche in questo caso consideriamo un sistema <strong>di</strong> equazioni, e valutiamol'errore attraverso il calcolo della norma due della soluzione sia nel casodell'algoritmo personale che nel caso dell'algoritmo implementato da matlab, infunzione della <strong>di</strong>mensione della matrice. Successivamente ne valuteremo i tempi <strong>di</strong>elaborazione.Partiamo da una matrice con n=10. Come si può vedere gli errori sono molto piccoli,compresi in un range tra 10 -15 e 10 -13 , tuttavia l'algoritmo personalizzato è affetto dameno errore, quin<strong>di</strong> è più stabile.15


Nel caso <strong>di</strong> matrici <strong>di</strong> or<strong>di</strong>ne superiore abbiamo che il range <strong>di</strong> errore si mo<strong>di</strong>fica, da10 -16 a 5*10 -11 nel caso <strong>di</strong> n=50 e da 2*10 -15 a 5*10 -9 nel caso <strong>di</strong> matrici con n=100,tuttavia il questi ultimi casi l'algoritmo <strong>di</strong> matlab sembra essere maggiormentestabile, in quanto raggiungono picchi <strong>di</strong> errore minori rispetto al caso dell'algoritmopersonalizzato.16


Circa i tempi mostriamo i seguenti grafici in funzione della <strong>di</strong>mensione n dellamatrice:Per n=10 i tempi sono compresi in un intorno <strong>di</strong> 5*10 -5 sec per l'algoritmo <strong>di</strong> Matlab,mentre variano anche <strong>di</strong> un or<strong>di</strong>ne <strong>di</strong> grandezza per l'algoritmo personalizzato (10 -5,10 -4 )sec.Per n superiori si verifica che l'algoritmo <strong>di</strong> matlab ha dei tempi che rimangonosostanzialmente invarianti rispetto al caso precedente, mentre nel caso dell'algoritmopersonalizzato si ha una variazione <strong>di</strong> circa due or<strong>di</strong>ni <strong>di</strong> grandezza. L'algoritmo <strong>di</strong>matlab è dunque significativamente più veloce.18


Quanto sopra scritto è reso ancora più notevole dall'ulteriore aumento <strong>di</strong> n.Per n=100 infatti si veda come i tempi dell'algoritmo personalizzato siano molto piùlenti.19


1.3.2 Confronto metodo QR e LU per sistemi malcon<strong>di</strong>zionati.Quando si sceglie <strong>di</strong> effettuare una fattorizzazione, si può scegliere sia unafattorizzazione QR che una fattorizzazione LU. In realtà la scelta non è del tuttocasuale, in quanto tra <strong>di</strong> essi cambia notevolmente il con<strong>di</strong>zionamento.Nelle <strong>fattorizzazioni</strong> LU il con<strong>di</strong>zionamento del sistema finale potrebbe esserenotevolmente superiore rispetto al sistema iniziale, mentre nelle <strong>fattorizzazioni</strong> QR,al contrario, il con<strong>di</strong>zionamento non cambia tra sistema iniziale e sistema finale.Questo fatto rende preferibile la scelta <strong>di</strong> una fattorizzazione QR nei sistemi malcon<strong>di</strong>zionati. Un caso in cui un sistema può essere mal con<strong>di</strong>zionato è quando dueequazioni sono quasi identiche. Ovviamente è ancora peggio quando sonocompletamente identiche. Ve<strong>di</strong>amo <strong>di</strong> darne una rappresentazione.Un sistema malcon<strong>di</strong>zionato è rappresentato dalla matrice <strong>di</strong> Hilbert.La matrice <strong>di</strong> Hilbert è una particolare matrice che ha sulle anti-<strong>di</strong>agonali i reciprocidei numeri interi. Questa matrice è fortemente mal con<strong>di</strong>zionata, ossia amplificamolto gli errori al crescere della <strong>di</strong>mensione del sistema.20


Come si evince dai grafici, la fattorizzazione QR è notevolmente più lineare, mentrela fattorizzazione LU è più irregolare. Questo fatto si nota maggiormente nellematrici <strong>di</strong> piccole <strong>di</strong>mensioni, in cui i punti sono ben separati.Tra i grafici non ho inserito quello della matrice <strong>di</strong> <strong>di</strong>mensione n=100, in quantol'elaborazione ha dato dei problemi dovuti al fatto che matlab riconosce la matrice <strong>di</strong>Hilbert come una matrice malcon<strong>di</strong>zionata, pertanto invia messaggi <strong>di</strong> warning cherallentano il processo e non lo fanno ultimare.21


1.3.3 FATTORIZZAZIONE DI GIVENSLa fattorizzazione <strong>di</strong> Givens è incentrata sulla rotazione <strong>di</strong> Givens.Una rotazione <strong>di</strong> Givens, o trasformazione <strong>di</strong> Givens è definita me<strong>di</strong>ante una matriceortonormale G ij∈ R minserisci matricedove c=cos θ e s=sin θ per θ appartenente ai reali e 1


Il risultato che abbiamo ottenuto è effettivamente coerente con quanto scritto sopra.La complessità computazionale tra i due meto<strong>di</strong>, se applicati a matrici quadrate, ènotevolmente <strong>di</strong>fferente. Il metodo <strong>di</strong> Householder richiede O( 2 3 n3)moltiplicazioni, contro le O( 4 3n3) moltiplicazioni nel caso <strong>di</strong> Givens.Questa <strong>di</strong>fferenza è visibile attraverso lo <strong>stu<strong>di</strong></strong>o dei tempi <strong>di</strong> simulazione <strong>di</strong> entrambi imeto<strong>di</strong>:Per matrici <strong>di</strong> piccole <strong>di</strong>mensioni i due meto<strong>di</strong> presentano pressoché gli stessi tempi.Al crescere delle <strong>di</strong>mensioni però accade che l'algoritmo <strong>di</strong> Householder piùefficiente computazionalmente, questo perché richiede la metà delle moltiplicazionirispetto all'algoritmo <strong>di</strong> Givens.26


1.4 L' ALGORITMO QRPer calcolare tutti gli autovalori <strong>di</strong> una matrice A si cerca <strong>di</strong> trasformarla, persimilitu<strong>di</strong>ne, in una <strong>di</strong> forma particolarmente semplice. La forma più desiderabilesarebbe quella <strong>di</strong>agonale (gli autovalori sono gli elementi sulla <strong>di</strong>agonale) ma non èpossibile ridurre per similitu<strong>di</strong>ne ogni matrice in forma <strong>di</strong>agonale in un numero finito<strong>di</strong> passi. Data la matrice quadrata A, si definisceA 0 = A;Se A k = Q k R k, con R k triangolare superiore e Q k ortogonale, allora si costruisce lasuccessione:A k+1 = R k Q kcon k= 0, 1, 2, ….La successione {A 0 , A 1, A 2 ,...} è essenzialmente unica (questo fatto <strong>di</strong>scendedall'unicità della decomposizione QR.Tutte le matrici A k , sono simili fra loro, dato cheA k+1 = R k Q k = (Q T k Q k ) R k Q k = Q T k (Q k R k )Q k = Q T k (A k ) Q ke Q T k = Q -1 .Se la matrice A, ha autovalori <strong>di</strong>stinti, la successione Ak definita attraversol'algoritmo QR converge ad una matrice triangolare superiore sulla cui <strong>di</strong>agonale sitrovano gli autovalori <strong>di</strong> A.T =[λ 1 • ⋯ •λ 2⋱ ⋮n]⋱ •λNegli altri casi tende alla forma seguente:[• • • ⋯ •• • • ⋱ •λ 3 ⋱ ⋮n]⋱ •λ28


in cui la parte sottostante una <strong>di</strong>agonale a blocchi, i cui blocchi sono <strong>di</strong> <strong>di</strong>mensione 1e <strong>di</strong> <strong>di</strong>mensione 2, è composta da zeri . Gli autovalori dei blocchi <strong>di</strong>agonali superstiticonvergono agli autovalori <strong>di</strong> A. Il limite non può essere sempre una matricetriangolare superiore perché, nel caso <strong>di</strong> matrici reali, le trasformazioni <strong>di</strong>Householder e quin<strong>di</strong> le <strong>fattorizzazioni</strong> QR e i prodotti RQ sono ancora reali ad ognipasso della successione. Non si potrebbero quin<strong>di</strong> trovare gli eventuali autovaloricomplessi <strong>di</strong> A. In presenza <strong>di</strong> coppie <strong>di</strong> autovalori complessi coniugati non e infattiverificata l'ipotesi. In tal caso compaiono dei blocchi <strong>di</strong>agonali a coefficienti reali <strong>di</strong><strong>di</strong>mensione 2, i cui autovalori complessi coniugati approssimano quelli <strong>di</strong> A.2Il costo computazionale del metodo QR e notevolmente alto:3 n3 per ognifattorizzazione QR eogni iterazione.n 32per ogni prodotto RQ, complessivamente76 n3 perMostro ora un esempio del modo in cui funziona l'algoritmo QR, attraverso l'uso deicoman<strong>di</strong> <strong>di</strong> matlab.Supponiamo <strong>di</strong> avere una generica matrice A 5x5:A =2.2362 1.7520 1.4943 1.0274 1.04671.7520 1.6695 1.1969 0.6517 0.76811.4943 1.1969 1.7012 0.5591 1.26951.0274 0.6517 0.5591 0.7690 0.58431.0467 0.7681 1.2695 0.5843 1.1218calcoliamo gli autovalori con il comando eig <strong>di</strong> matlab:>> eig(A)ans =0.00190.11050.49920.90395.982229


Applico ora l'algoritmo QR, attraverso la funzione “algqr”, che prende in ingresso lamatrice A e un generico numero <strong>di</strong> iterazioni che stabilisco a piacere, e calcola inuscita la matrice T, nella cui <strong>di</strong>agonale compaiono gli autovalori <strong>di</strong> A, e le matrici Qed R in cui la matrice A viene fattorizzata.[T,Q,R]=algqr(A,niter)T =5.9822 -0.0000 -0.0000 -0.0000 -0.0000-0.0000 0.9039 -0.0000 -0.0000 -0.00000.0000 -0.0000 0.4992 0.0000 -0.00000.0000 -0.0000 -0.0000 0.1105 0.00000.0000 -0.0000 -0.0000 0.0000 0.0019Q =1.0000 0.0000 -0.0000 -0.0000 0.0000-0.0000 1.0000 0.0000 0.0000 -0.00000.0000 -0.0000 1.0000 0.0000 -0.00000.0000 -0.0000 -0.0000 1.0000 -0.00000.0000 -0.0000 -0.0000 0.0000 1.0000R =5.9822 -0.0000 -0.0000 -0.0000 -0.0000-0.0000 0.9039 -0.0000 -0.0000 -0.0000-0.0000 0 0.4992 0.0000 -0.00000.0000 0 0 0.1105 0.0000-0.0000 0 0 0.0000 0.001930


Come si può vedere nella <strong>di</strong>agonale principale T compaiono gli autovalori dellamatrice A, mentre Q ed R sono il risultato della fattorizzazione QR <strong>di</strong> A, comevolevamo <strong>di</strong>mostrare.Supponiamo ora <strong>di</strong> avere una matrice A i cui autovalori non sono tutti reali, ma alcunisono complessi coniugati. Ve<strong>di</strong>amo come si comporta l'algoritmo QR:A =0.8244 0.9814 0.8266 0.8509 0.96490.9915 0.2546 0.8551 0.2461 0.99100.9843 0.3328 0.9510 0.2355 0.74580.5584 0.0367 0.3432 0.9527 0.18090.2175 0.8213 0.8360 0.8074 0.3675Calcolo gli autovalori:>> eig(A)ans =3.2619-0.68870.75250.0123 + 0.2547i0.0123 – 0.2547iStabilisco un numero <strong>di</strong> iterazioni, alto a piacere:niter=150e richiamo la mia funzione:>> [T,Q,R]=algqr(A,niter)31


T =3.2619 0.4170 0.2336 0.0550 -0.5882-0.0000 0.7525 -0.4422 0.0310 -0.1126-0.0000 -0.0000 -0.6887 -0.4476 -0.3323-0.0000 -0.0000 -0.0000 -0.0341 0.16320.0000 -0.0000 -0.0000 -0.4107 0.0587Q =1.0000 0.0000 -0.0000 0.0000 -0.0000-0.0000 1.0000 -0.0000 -0.0000 -0.00000.0000 0.0000 1.0000 0.0000 0.00000.0000 0.0000 0.0000 -0.1414 -0.9900-0.0000 0.0000 0.0000 0.9900 -0.1414R =3.2619 0.4170 0.2336 0.5745 0.13760 0.7525 -0.4422 0.1071 0.04660 -0.0000 -0.6887 0.3922 -0.39610 0.0000 -0.0000 -0.1567 -0.05680 0.0000 0.0000 0 -0.4149Dopo 150 iterazioni ve<strong>di</strong>amo che la matrice T non è perfettamente <strong>di</strong>agonale, tuttaviagli autovalori reali si trovano nella sua <strong>di</strong>agonale, mentre gli autovalori complessiconiugati si trovano considerando il blocco <strong>di</strong>agonale <strong>di</strong> <strong>di</strong>mensione 2x2 dellamatrice T. Infatti considerando tale blocco come una matrice otteniamo:C =-0.0341 0.1632-0.4107 0.058732


Calcolando glia autovalori della matrice C otteniamo :>> eig(C)ans =0.0123 + 0.2547i0.0123 – 0.2547iche sono gli autovalori complessi della matrice A <strong>di</strong> partenza.1.5 FORMA DI HESSENBERGIl metodo <strong>di</strong> fattorizzazione <strong>di</strong> Givens è più efficiente rispetto a quello <strong>di</strong>Householder quando abbiamo a che fare con matrici sparse oppure con matrici informa <strong>di</strong> Hessenberg.Una matrice A può essere trasformata me<strong>di</strong>ante trasformazione <strong>di</strong> similitu<strong>di</strong>ne in unamatrice strutturata, della forma:Ã =[• ⋯ ⋯ ••]• ⋱ ⋮⋱ ⋱ ⋮•che prende il nome <strong>di</strong> struttura <strong>di</strong> Hessenberg, dove ̃ =0 per i


calcolata come prodotto <strong>di</strong> matrici <strong>di</strong> Householder P (1) ...P (n-2) .In ogni passo k-esimo si trasforma A per similitu<strong>di</strong>ne, attraverso la matrice <strong>di</strong>Householder P k , alla quale fa in modo <strong>di</strong> annullare gli elementi in posizione k+2,...ndella colonna k-esima della matrice per k=1,...,(n-2).Il passaggio in forma <strong>di</strong> Hessenberg richiede un costo computazionale dell'or<strong>di</strong>ne <strong>di</strong>n 3 flops.La procedura può essere così schematizzata:[• • • •• • •• • •• • • • • • • • • • • •• • • • (1)→[• P0 • • • (2)→[• 0 • • •• • • •]→P0 • • •]→0 0 • •]dove gli elementi in<strong>di</strong>cati con il simbolo • sono gli elementi non nulli della matrice.Partendo dalla con<strong>di</strong>zione A=A(0) si genera la successione:P T(k )A (k−1) P (k)=(P (1)...P (k )) T A (P (1)... P (k))=Q T (k)AQ (k)k⩾1.L'operazione P T (k)A (k −1) lascia invariate le prime k righe <strong>di</strong> A (k-1) , mentrel'operazione P T (k )A (k−1) P (k) lascia invariate le prime k colonne. Dopo n-2 iterazionisi arriva alla matrice à in forma <strong>di</strong> Hessenberg superiore.1.6 FATTORIZZAZIONE QR DI UNA MATRICE INFORMA DI HESSENBERGIl vantaggio <strong>di</strong> utilizzare la matrice <strong>di</strong> Hessenberg, oltre a quello già citatodell'accelerazione della convergenza è legato al metodo <strong>di</strong> Givens. Infatti per34


calcolare la fattorizzazione QR <strong>di</strong> una matrice in forma <strong>di</strong> Hessenberg è possibileapplicare (n-1) trasformazioni <strong>di</strong> Givens che annullano gli elementi sotto<strong>di</strong>agonali.Partiamo da una matrice in forma <strong>di</strong> Hessenberg T(0)=H(0).Per ogni k>=1 si calcola la fattorizzazione QR <strong>di</strong> H(k-1) con n-1 rotazioni <strong>di</strong> Givens(Q (k ) ) T H (k −1) (k)=(G n−1) T ...(G (k) 1) T H (k−1) =R (k ) ,che richiede 3n 2 flops.Il passo successivo consiste nel completare la trasformazione per similitu<strong>di</strong>neortogonaleH (k) =R (k) Q (k) = R (k) (G (k) (k1...G ) n −1),che richiede 3n 2 operazioni.La matrice Q (k) =(G (k) 1...G (k) n−1) è ortogonale ed è in forma <strong>di</strong> Hessenberg superiore.Si ha infatti cheQ (k) =G 1(k)G 2(k) =[ • • 0• • 01][ 1 0 00 • •0 0•] [ • • •= • • •0 •0 • •]In tutto dunque si ha un costo pari a 6n 2 flops.A questo punto, se proviamo ad applicare le <strong>fattorizzazioni</strong> QR <strong>di</strong> Givens e QR <strong>di</strong>Householder questa volta a una matrice in forma <strong>di</strong> Hessenberg, abbiamo che lafattorizzazione <strong>di</strong> Givens è più efficiente, anche al crescere delle <strong>di</strong>mensioni dellamatrice.In matlab la matrice <strong>di</strong> Hessenberg si ottiene me<strong>di</strong>ante il comandohess(A);35


Facendo una valutazione sui tempi <strong>di</strong> elaborazione, che mettono in risalto le<strong>di</strong>fferenze computazionali tra gli algoritmi, otteniamo i seguenti risultati al variare <strong>di</strong>n:36


Come si nota, l'algoritmo <strong>di</strong> Givens è eccezionalmente più stabile, i tempi sononettamente inferiori rispetto all'algoritmo <strong>di</strong> Householder al crescere della<strong>di</strong>mensione n della matrice in forma <strong>di</strong> Hessenberg.37


1.7 ALGORTIMO QR CON SHIFTSe gli autovalori della matrice A anche se sono tutti <strong>di</strong>stinti tra loro non sono benseparati, è possibile che la convergenza della matrice T potrebbe risultare molto lenta.Per questo motivo è utile implementare la tecnica dello shift.Esistono <strong>di</strong>verse tecniche <strong>di</strong> shift, tuttavia in questa tesina verrà affrontata la tecnicadello shift singolo, che consente <strong>di</strong>a accelerare la convergenza rispetto al metodo <strong>di</strong>base quando A presenta autovalori vicini in modulo.Il metodo QR con shift può essere schematizzato nel modo seguente:1. Si determinano Q (k) , R (k) tali cheQ (k) R (k) = T (k-1) - μI (fattorizzazione QR)2. Si pone T (k) = Q (k) R (k) + μIdove μ∈R viene chiamato shift, k=1,2,...fino alla convergenza eT (0) =(Q (0) ) T AQ (0 ) è una matrice in forma <strong>di</strong> Hessenberg superiore.La matrice T(k) generata è simile alla matrice A <strong>di</strong> partenza per ogni k⩾1.Supponiamo che μ abbia un valore fissato. Or<strong>di</strong>niamo gli autovalori <strong>di</strong> A nel modoseguente:∣λ 1 −μ∣⩾∣λ 2 −μ∣⩾...⩾∣λ n −μ∣.Si può <strong>di</strong>mostrare che per 1


otterranno tutti gli autovalori <strong>di</strong> A.Un metodo per la costruzione dello shift con matlab è il seguente:%QR con singolo shiftfunction[T,iter]=qrshift(A,toll,itmax)n=max(size(A));iter=0[T,Q]=houshess(A);for k=n:1:2I=eye(k);while abs(T(k,k-1))>toll*(abs(T(k,k))+abs(T(k-1,k-1)))iter=iter+1;if(iter>itmax),returnendmu=T(k,k);[Q,R,c,s]=qrgivens(T(1:k,1:k)-mu*I);T(1:k,1:k)=R*Q+mu*I;endT(k,k-1)=0;end39

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

Saved successfully!

Ooh no, something went wrong!