12.01.2015 Views

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

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.

4.4. ALGORITMUL QR 261<br />

4. [A(k : l,k : l),c,s] = IT QR1(A(k:l,k:l),w)<br />

5. Dacă k > 1 atunci<br />

1. Pentru i = 1 : l−k<br />

1. A(1:p,p+i : p+i+1)=<br />

= Gcd(A(1:p,p+i : p+i+1),c i ,s i ).<br />

6. Dacă l < n atunci<br />

1. Pentru i = 1 : l−k<br />

1. A(p+i : p+i+1,l+1: n) =<br />

= Gcs(c i ,s i ,A(p+i : p+i+1,l+1: n))<br />

7. cont it ← cont it+1<br />

6. Dacă opt = ′ da ′ atunci<br />

1. Pentru i = 1 : l−k<br />

1. Q(:, p+i : p+i+1)= Gcd(Q(:, p+i : p+i+1),c i ,s i )<br />

Comentarii. Algoritmul implementează ideile expuse în prezentarea teoretică premergătoare,<br />

iar comentariile incluse a<strong>si</strong>gură, sperăm, transparenţa necesară pentru<br />

identificarea lor. Menţionăm suplimentar că, pentru contorizarea iteraţiilor, a fost<br />

utilizată variabila întreagă cont it care se reiniţializeză la zero ori de câte ori se a-<br />

nulează un nou element subdiagonal. De asemenea, s-a utilizat instrucţiunea break<br />

(de ieşire forţată din cicluri de tip pentru sau c^at timp) pentru încadrarea indexărilor<br />

în limitele permise de dimen<strong>si</strong>unile matricelor. Vom apela în continuare<br />

acest algoritm utilizând <strong>si</strong>ntaxa<br />

[S,Q] = QR1(A,Q,tol,opt).<br />

În aspectele sale esenţiale, algoritmul de mai sus stă la baza tuturor programelor<br />

profe<strong>si</strong>onale de calcul al <strong>valorilor</strong> <strong>proprii</strong> ale unei matrice complexe. Utilizarea lui<br />

pentru calculul formei Schur a unei matrice reale este po<strong>si</strong>bilă 24 , dar este mai puţin<br />

eficientă în raportcu variantaspecial elaboratăpentru această<strong>si</strong>tuaţie şi prezentată<br />

în continuarea acestui capitol.<br />

Datorită procesului iterativ complexitatea algoritmului depinde de datele de intrare<br />

precum şi de toleranţa practicată. Pentru un nivel de toleranţă de ordinul<br />

de mărime al erorilor de reprezentare 25 , evaluările experimentale converg către<br />

aprecierea că, în medie, două iteraţii sunt suficiente pentru a pune în evidenţă o<br />

valoare proprie. În această <strong>si</strong>tuaţie, pentru matrice de ordin superior (de exemplu<br />

n > 100), se poate aprecia că algoritmul QR1 are o complexitate O(n 3 ). Evaluarea<br />

de mai sus este corectă pentru matrice de dimen<strong>si</strong>uni medii şi mari. În exemplele<br />

academice sau aplicaţiile studenţeşti apar, de regulă, matrice de ordin redus<br />

24 Pentru probleme de mică dimen<strong>si</strong>une diferenţa de eficienţă nu este deci<strong>si</strong>vă astfel că acest<br />

algoritm poate fi folo<strong>si</strong>t cu succes. Atragem însă atenţia că procedura Gc de calcul a unei rotaţii<br />

complexe (vezi capitolul 3) aplicată unui vector real calculează de fapt o rotaţie reală astfel încât<br />

pentru date reale acest algoritm va lucra exclu<strong>si</strong>v cu numere reale privite ca numere complexe şi<br />

nu va fi capabil să reducă blocurile diagonale 2 × 2 cu valori <strong>proprii</strong> complexe. Pentru a depăşi<br />

acest impas se poate proceda, de exemplu, ca în algoritmul special destinat cazului real (vezi mai<br />

departe) prin identificarea unor astfel de <strong>si</strong>tuaţii şi monitorizarea blocurilor diagonale sau prin<br />

introducerea unor deplasări implicite modificate cu parte imaginară nenulă.<br />

25 În pachetele comerciale de programe acest nivel de toleranţa este practicat uzual şi nu poate<br />

fi modificat de utilizator.

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

Saved successfully!

Ooh no, something went wrong!