You are on page 1of 7

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
nn
) 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

j=1
a
ij
x
j
= b
i
(2)
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
ii
(

j=i
a
ij
x
j
(t) b
i
) (3)
Acest algoritm construieste un sir care converge la solutia sistemului. Exista situatii in care sirul construit
cu metoda lui Jacobi nu este convergent (gura 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
ii
(

j<i
a
ij
x
j
(t + 1) +

j>i
a
ij
x
j
(t) b
i
) (4)
In gura 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
ii
(

j=i
a
ij
x
j
(t) b
i
) (5)
x
i
(t + 1) = (1 )x
i
(t)

a
ii
(

j<i
a
ij
x
j
(t + 1) +

j>i
a
ij
x
j
(t) b
i
) (6)
Metoda lui Richardson se obtine prin rescrierea sistemului (1) sub forma x = x(Axb) 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:
x = x B(Ax b)
si aplicand formula:
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 ecare procesor i calculeaza valoarea lui x
i
(t) la ecare 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 semnicativ mai mic decat n numarul de variabile. In
acest caz, mai multe variabile pot atribuite aceluiasi procesor.
Un punct nal de interes se refera la oprirea algoritmului iterativ. De obicei conditia de terminare este
legata de evaluarea unei expresii, cum ar ||Ax(t) b||, si de a opri algoritmul daca valoarea sa este destul
de mica.
De exemplu, sa presupunem ca || || este norma maximului. La ecare iteratie, ecare procesor cal-
culeaza valoarea max |Ax
i
b
i
|. Aceste valori pot apoi comparate cu ajutorul unui arbore, ecare 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
= a
ii
, si e B o matrice cu zero pe diagonala principala B = AD.
Presupunand ca elementele de pe diagonala principala a matricei A sunt nenule, algoritmul Jacobi poate
scris matriceal sub forma:
x(t + 1) = D
l
Bx(t) + D
l
b. (8)
Similar, algoritmul Jacobi modicat poate scris sub forma:
x(t + 1) = [(1 )ID
l
B]x(t) + D
l
b. (9)
Pentru cazul in care se lucreaza cu algoritmul Seidel-Gauss sau Seidel-Gauss modicat, 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 descrisa cu ajutorul formulei:
x(t + 1) = (I A)x(t) + b (12)
Ecuatiile anterioare pot scrise unitar sub forma echivalenta:
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, e x

care verica x

= Mx

+ Gb si e
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.
Denition 2.1 O matrice patratica A este dominanta pe linii daca:

j=i
|a
ij
| < |a
ii
|, i. (14)
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 denita.
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 ind 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 nit 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 denita) 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 denit 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:
s(t) = g(t) +
t1

i=0
c
i
s(i)
6
unde coecientii 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:
0 = s

(t)As(j) = g

(t)As(j) +
t1

i=0
c
i
s

(i)As(j) = g

(t)As(j) + c
j
s

(j)As(j)
de unde se obtine:
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:
s(t) = g(t) + (t)s(t 1)
unde
(t) =
g

(t)g(t)
s

(t 1)(g(t) g(t 1))


=
g

(t)g(t)
g

(t 1)g(t 1)
Avem relatia:
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 ecare
procesor cunoaste intrarile dintr-o linie diferita a matricei A. Apoi, o matrice-vector Ax(t) poate 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 ecare j, si aceste valori ar putea reproduse la ecare
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 ecare procesor.
7

You might also like