Calculul valorilor si vectorilor proprii
Calculul valorilor si vectorilor proprii
Calculul valorilor si vectorilor proprii
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.