Metode iterative pentru rezolvarea sistemelor de ecuatii liniare 1 Metode iterative clasice Metodele iterative sunt intens folosite, in special pentru rezolvarea de probleme mari, cum sunt cele de discretizare a ecuatiilor cu derivate partiale. Fie A o matrice patratica reala (A R n n ) si b un vector din R n. Se considera sistemul: Ax = b (1) unde x este un vector necunoscut ce trebuie determinat. Presupunem ca matricea A este inversabila si deci sistemul are solutie unica. Presupunem ca a i-a ecuatie a sistemului este: n a ij x j = b i (2) j=1 Metoda lui Jacobi de rezolvare a sistemului (1) este data de urmatorul algoritm: pornind cu x(0) R n, se calculeaza x(t) pentru t = 1, 2,... cu ajutorul relatiei: x i (t + 1) = 1 ( a ij x j (t) b i ) (3) j i Acest algoritm construieste un sir care converge la solutia sistemului. Exista situatii in care sirul construit cu metoda lui Jacobi nu este convergent (figura 1). 1
Figure 1: Convergenta metodei Jacobi 2
Metoda Seidel-Gauss este urmatoarea: pornind cu x(0) R n, se calculeaza x(t) pentru t = 1, 2,... cu ajutorul relatiei: x i (t + 1) = 1 ( a ij x j (t + 1) + a ij x j (t) b i ) (4) j<i j>i In figura 2 este ilustrata o situatie de convergenta a algoritmului si una de divergenta. Variatii ale metodelor Jacobi si Seidel-Gauss se obtin folosind un scalar diferit de zero (numit parametru de relaxare): x i (t + 1) = (1 γ)x i (t) γ ( a ij x j (t) b i ) (5) j i x i (t + 1) = (1 γ)x i (t) γ ( a ij x j (t + 1) + a ij x j (t) b i ) (6) j<i j>i Metoda lui Richardson se obtine prin rescrierea sistemului (1) sub forma x = x γ(ax b) si construind sirul iterativ folosind formula: x(t + 1) = x(t) γ(ax(t) b) (7) O metoda mai generala se obtine folosind o matrice inversabila B, transformand sistemul intr-o forma echivalenta: si aplicand formula: x = x B(Ax b) x(t + 1) = x(t) B(Ax(t) b) Theorem 1.1 Daca sirul {x(t)} generat de o metoda iterativa este convergent, atunci el converge la o solutie a sistemului Ax = b. 3
Figure 2: Convergenta metodei Seidel-Gauss 4
1.1 Implementari paralele ale metodelor iterative clasice Presupunem ca avem n procesoare si ca fiecare procesor i calculeaza valoarea lui x i (t) la fiecare iteratie t. Fiecare procesor i cunoaste intrarile de pe linia i a matricei A. Pentru a calcula valoarea lui x i (t+1) procesorul i trebuie sa cunoasca valorile lui x j (t). Astfel se transmit toate valorile x j (t) de la iteratia t catre procesorul i chiar daca multe valori a ij sunt nule. In practica, p numarul de procesoare este adesea semnificativ mai mic decat n numarul de variabile. In acest caz, mai multe variabile pot fi atribuite aceluiasi procesor. Un punct final de interes se refera la oprirea algoritmului iterativ. De obicei conditia de terminare este legata de evaluarea unei expresii, cum ar fi Ax(t) b, si de a opri algoritmul daca valoarea sa este destul de mica. De exemplu, sa presupunem ca este norma maximului. La fiecare iteratie, fiecare procesor calculeaza valoarea max Ax i b i. Aceste valori pot fi apoi comparate cu ajutorul unui arbore, fiecare procesor propagand spre radacina arborelui propria valoare si valorile pe care le-a primit. 2 Analiza convergentei metodelor iterative clasice Fie D o matrice diagonala astfel incat d ii =, si fie B o matrice cu zero pe diagonala principala B = A D. Presupunand ca elementele de pe diagonala principala a matricei A sunt nenule, algoritmul Jacobi poate fi scris matriceal sub forma: Similar, algoritmul Jacobi modificat poate fi scris sub forma: x(t + 1) = D l Bx(t) + D l b. (8) x(t + 1) = [(1 γ)iγd l B]x(t) + γd l b. (9) Pentru cazul in care se lucreaza cu algoritmul Seidel-Gauss sau Seidel-Gauss modificat, matricea A se poate scrie sub forma A = L + D + U, unde L este strict inferior triunghiulara, D este diagonala, iar U este strict superior triunghiulara. Astfel se obtin formulele echivalente: x(t + 1) = (1 γ)x(t) γd 1 [Lx(t + 1) + Ux(t) b] (10) x(t + 1) = (I + γd 1 L)[(1 γ)i γd 1 U]x(t) + γ(i + γd 1 L) 1 D 1 b (11) Analog, metoda Richardson poate fi descrisa cu ajutorul formulei: Ecuatiile anterioare pot fi scrise unitar sub forma echivalenta: x(t + 1) = (I γa)x(t) + γb (12) x(t + 1) = Mx(t) + Gb (13) Deci pentru a stabili convergenta metodelor iterative ar trebui doar sa analizam convergenta sirului generat cu ajutorul relatiei precedente. Theorem 2.1 Presupunand ca matricea I M este inversabila, fie x care verifica x = Mx + Gb si fie sirul generat cu ajutorul iteratiei x(t + 1) = Mx(t) + Gb. Atunci sirul converge la x pentru orice x(0) daca si numai daca ρ(m) < 1. Definition 2.1 O matrice patratica A este dominanta pe linii daca: a ij <, i. (14) j i 5
Remark 2.1 Daca A este dominanta pe linii, atunci matricea M asociata iteratiei Jacobi are raza spectrala ρ(m) < 1. Theorem 2.2 Daca A este dominanta pe linii, atunci metoda Jacobi converge la o solutie a sistemului Ax = b. 3 Metoda gradientului conjugat Consideram un sistem liniar de ecuatii: Ax = b. Presupunem ca A este o matrice patratica, simetrica si pozitiv definita. Metodele directiilor conjugate sunt motivate de dorinta de a accelera viteza de convergenta a metodelor clasice iterative pentru aceasta clasa de probleme. In timp ce ele sunt garantate pentru a gasi solutia dupa cel mult n iteratii, ele sunt privite ca fiind cele mai bune metode iterative, deoarece, de obicei, mai putin de n iteratii sunt executate, in special pentru probleme mari. Aceste metode sunt, de fapt, aplicabile si pentru probleme de optimizare noncuadratice. Pentru astfel de probleme, in general, se termina procesul dupa un numar finit de iteratii, dar, atunci cand sunt aplicate in mod corespunzator, au convergenta atractiva si rata de convergenta convenabila. Presupunem ca b = 0. Functia cost a metodei este calculatat cu ajutorul relatiei: F (x) = 1 2 x Ax Aceasta functie este strict convexa (deoarece A este pozitiv definita) si ia valoarea minima pentru x = 0, care este deasemenea solutia unica a sistemului Ax = 0. Forma generala a metodei este data de relatia: x(t + 1) = x(t) + γ(t)s(t), t = 0, 1,... unde s(t) este directia, iar γ(t) este un parametru definit de relatia F (x(t) + γ(t)s(t)) = min γ R F (x(t) + γs(t)). Vectorul directie este ales astfel incat: s (t)as(t) = 0, daca t r. Facem urmatoarea notatie: g(t) = Ax(t) = F (x(t)). Proposition 3.1 Presupunem ca s(0), s(1),..., s(t) sunt diferite de zero si sunt conjugate. Atunci: Vectorii s(0), s(1),..., s(t) sunt liniar independenti. Daca 0 i k t atunci avem relatia: g (k + 1)s(i) = 0 Vectorul x(k) satisface relatia F (x(k + 1)) F (x(k)), pentru orice k t. 3.1 Descrierea algoritmului Se construieste s(t) folosind formula: t 1 s(t) = g(t) + c i s(i) i=0 6
unde coeficientii c i sunt alesi astfel incat s(t) este conjugat cu s(0), s(1),..., s(t 1). Presupunand ca s(0), s(1),..., s(t) sunt deja conjugate, pentru j = 0,..., t 1 avem: t 1 0 = s (t)as(j) = g (t)as(j) + c i s (i)as(j) = g (t)as(j) + c j s (j)as(j) de unde se obtine: i=0 c j = g (t)as(j) s (j)as(j). Deoarece g(j + 1) g(j) = A(x(j + 1) x(j)) = γ(j)as(j), obtinem: c j = g (t)(g(j + 1) g(j)) s (j)(g(j + 1) g(j)). Se observa astfel ca g(j) este o combinatie liniara intre s(0), s(1),..., s(j), si se obtine g (t)g(j) = 0. Daca j < t 1 atunci c j = 0, si obtinem: unde Avem relatia: β(t) = s(t) = g(t) + β(t)s(t 1) g (t)g(t) s (t 1)(g(t) g(t 1)) = g (t)g(t) g (t 1)g(t 1) s (t)a(x(t) + γ(t)s(t)) = 0 = γ(t) = s (t)g(t) s (t)as(t). Iteratia urmatoare in cadrul algoritmului gradientului conjugat x(t + 1) este calculata prin relatia: x(t + 1) = x(t) + γ(t)s(t). Proposition 3.2 Algorimul gradientului conjugat se termina in cel mult n pasi, asta inseamna ca exista un t n astfel incat g(t) = 0 si x(t) = 0. 3.2 Implementarea paralela Presupunand ca la inceputul iteratie t, x(t), s(t 1) si g (t 1)g(t 1) au fost deja calculate, avem nevoie pentru sa evaluam vectorii g(t) = Ax(t), produsul vectorial g (t)g(t), sa determinam β(t) si s(t), apoi sa evaluam As(t), si in cele din urma sa calculam produsele vectoriale s (t)(as(t)), s (t)g(t). Daca n procesoare sunt disponibile, este natural sa lasam procesorul i sa controleze componenta i a vectorilor x(t), s(t) si g(t). Produsele scalare sunt calculate prin lasarea procesorului i sa calculeze produsul componentelor i si apoi acumuleze sumele partiale de-a lungul un arbore de procesoare. Aceasta este o acumulare intr-un singur nod si are nevoie de timp proportional cu diametrul retelei de interconectare. Apoi, valorile calculate ale produselor scalare sunt difuzate la toate procesoarele. Noi presupunem acum ca fiecare procesor cunoaste intrarile dintr-o linie diferita a matricei A. Apoi, o matrice-vector Ax(t) poate fi calculata prin difuzarea vectorului x(t) si avand procesorul i care calculeaza produsul scalar al lui x cu linia i a matricei A. Alternativ, procesor i ar putea calcula [A] ji x i pentru fiecare j, si aceste valori ar putea fi reproduse la fiecare procesor j, cu sume partiale formate de-a lungul drumului. In cazul in care mai putin de n procesoare sunt disponibile, problemele implicate sunt aceleasi cu exceptia faptului ca exista mai multe componente, si mai multe linii ale matricei A, alocate pentru fiecare procesor. 7