12.01.2015 Views

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

4.4. ALGORITMUL QR 239<br />

4.4 Algoritmul QR<br />

Algoritmul QR este, în esenţă, o procedură de deflaţie iterativă care construieşte<br />

(recurent)unşirdematriceunitarasemeneacu matriceainiţială, şircare, încondiţii<br />

precizate,esteconvergentcătreformaSchur. Încazulrealsepoateimpuneutilizarea<br />

exclu<strong>si</strong>vă a aritmeticii reale. În această <strong>si</strong>tuaţie termenii şirului sunt matrice ortogonal<br />

asemenea, iar limita sa este o formă Schur reală a matricei iniţiale.<br />

În vederea minimizării efortului de calcul, într-o fază preliminară, matricea dată<br />

este adusă, prin transformări de asemănare ce implică un număr (teoretic) finit<br />

şi (practic) rezonabil de mic de operaţii, la cea mai apropiată structură po<strong>si</strong>bilă<br />

de forma Schur (reală). Această structură este forma superior Hessenberg 14 . În<br />

continuare, structura Hessenberg este conservată de recurenţa fazei iterative a algoritmului.<br />

În acest fel, se obţine o importantă reducere a complexităţii unei iteraţii<br />

QR, fapt esenţial în economia algoritmului.<br />

Performanţele deosebite ale algoritmului QR se explică atât prin deciziile teoretice<br />

– cum sunt cele referitoare la maximizarea vitezei de convergenţă – cât şi<br />

prin numeroase decizii ”tehnice” de gestionare structurală optimă pe parcursul<br />

desfăşurării calculului.<br />

În vederea unei prezentări mai clare şi mai concise a algoritmilor din această<br />

secţiune vom folo<strong>si</strong> o serie de proceduri dezvoltate în capitolul 3. Sintaxa utilizată<br />

şi o descriere succintă a acestor proceduri sunt date în tabelul 4.3 15 . Precizăm<br />

că, dacă în apelul acestor proceduri, unii dintre parametrii de ieşire au acelaşi<br />

nume cu unii dintre parametrii de intrare, atunci suprascrierea are loc în interiorul<br />

procedurii respective, cu efecte benefice corespunzătoare pentru economia spaţiului<br />

de memorie necesar. De asemenea, pentru a crea po<strong>si</strong>bilitatea unor comparaţii<br />

corecte a complexităţilor, numărul a<strong>si</strong>mptotic de operaţii aritmetice dat în tabel<br />

este cel corespunzător operaţiilor cu numere reale 16 .<br />

14 Reamintim că matricea H ∈ IC n×n este în formă superior Hessenberg dacă h ij = 0, ∀i > j+1.<br />

15 Atragem atenţia că, din dorinţa de a prezenta cât mai unitar şi mai limpede algoritmii<br />

din capitolele 4, 5 şi 6, procedurile din tabelul 4.3 au denumirile şi <strong>si</strong>ntaxele po<strong>si</strong>bil diferite de<br />

cele introduse în capitolul 3. Evident, pentru o implementare performantă a acestor proceduri<br />

(acurateţe maximă, memorare optimă etc.) vor fi urmate recomandările date în capitolul 3. Facem,<br />

de asemenea, precizarea că reflectorii complecşi utilizaţi în algoritmii din capitolele 4, 5 şi 6 sunt, în<br />

exclu<strong>si</strong>vitate, reflectori hermitici. Acolo unde utilizarea reflectorilor nehermitici oferă o alternativă<br />

de calcul viabilă (cum este cazul unor algoritmi din capitolul 5), ver<strong>si</strong>unile respective fac obiectul<br />

unor exerciţii.<br />

16 În cadrul algoritmilor care operează cu numere complexe evaluarea numărului a<strong>si</strong>mptotic de<br />

operaţii aritmetice s-a realizat cu următoarele corespondenţe:<br />

Operaţie cu numere complexe Operaţii cu numere reale<br />

adunare/scădere 2<br />

înmulţire 6<br />

împărţire 11.<br />

Totuşi, chiar cu acceptarea aritmeticii complexe, acolo unde economia de efort de calcul este evidentă,<br />

evaluarea s-a făcut con<strong>si</strong>derându-se că s-au utilizat explicit operaţiile aritmetice cu numere<br />

reale. Astfel, de exemplu, pentru un vector x ∈ IC n , ‖x‖ 2 2 se calculează cu expre<strong>si</strong>a ‖x‖2 2 =<br />

= ‖Rex‖ 2 2 + ‖Imx‖2 2 şi nu folo<strong>si</strong>nd ‖x‖2 2 = xH x = ∑ n<br />

i=1 ¯x ix i , realizându-se un efort de 4n flopi<br />

în loc de 7n flopi. Precizăm, de asemenea, că evaluările numărului de operaţii nu includ operaţii<br />

conexe cum ar fi scalarea.

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

Saved successfully!

Ooh no, something went wrong!