Sunteți pe pagina 1din 7

Laborator 7 2020

Metode iterative staţionare

Metodele iterative au la bază construcţia unui şir de aproximate ale soluţiei x(0), x(1), …. Pentru
fiecare metodă trebuie cunoscute condiţii pe care să le satisfacă matricea A pentru ca şirul să fie
convergent. Convergenţa şirului ne asigură posibilitatea de a alege un şir astfel încât x(k) să
aproximeze soluţia cu precizia dorită.
Metodele iterative staţionare pot fi exprimate în forma simplificată x ( k )  Cx( k 1)  E unde k
prezintă pasul de iterare, iar CMn,n şi EMn,1 nu depind de pasul de iterare, adică acestea rămân
constante pe durata iterării. În continuare sunt prezentate 2 metode staţionare iterative.

Metoda iterativă Jacobi (metoda iteraţiilor simultane)


Se consideră un sistem liniar, Ax = b, cu n ecuaţii:

(1) {

Considerând că sistemul examinat este astfel structurat încât elementele diagonale cu


i=1,2,...,n sunt dominante în valoarea absolută, rearanjăm sistemul eliminând variabilele xi din
termenii care conţin coeficienţii de la fiecare rând în felul următor :

(2)

Dacă în partea dreaptă a sistemului (2) se introduce o soluţie iniţiala xi(0) (care de cele mai
multe ori se ia egală cu zero xi(0)=0 ), prin rezolvarea sistemului (2) se obţine prima soluţie
aproximativă xi(1). Introducând noua soluţie obţinută în partea dreaptă a sistemului se obţine a doua
soluţie aproximativă xi(2).

Continuând acest proces pentru pasul k+1 se obţine soluţia :

(3) ( ∑ )

O condiţie suficientă pentru convergenţa procesului iterativ este că:

| | ∑| |

Calculul iterativ poate înceta la îndeplinirea următorului criteriu de convergenţă:


| |
unde eroarea este impusă de către utilizator.

NOTĂ. În cazul în care condiţia de convergenţă este satisfăcută, atunci şi soluţia căutată va
converge spre soluţia reală, indiferent de valoarea aproximaţiei iniţiale x0.
1
Laborator 7 2020

Exemplu 1. Utilizarea metodei iterative Jacobi

Se consideră sistemul de ecuaţii liniare :

Se cere rezolvarea sistemului cu precizia =10-5 = 0.00001

Pentru rezolvarea acestui sistem e nevoie mai întâi să rearanjăm ecuaţiile în aşa fel încât fiecare
necunoscută să aibă cel mai mare coeficient în modul pe linia i şi coloana i, pornind cu i=1:

{ ( ), ( )

Rezolvăm fiecare ecuaţie faţă de necunoscuta respectivă. Prima dată ne uităm dacă avem cel mai
mare coeficient pe linia 1, respectiv coloana 1, apoi ne uităm la linia 2, respectiv coloana 2, şi în
cele din urmă la cel mai mare coeficient de pe linia 3, coloana 3. Se poate observa că sistemul este
bine aranjat şi putem începe rezolvarea ecuaţiilor faţă de cele trei necunoscute.

( )

( )

( )
{

Sistemul folosit pentru aplicarea metodei Jacobi este:

Alegem ca o soluţie iniţială:


Rezultă că prima soluţie aproximativă:

Introducem valorile obţinute pentru în partea dreaptă a sistemului, rezultând o nouă


soluţie :

2
Laborator 7 2020

Introducem valorile obţinute pentru în partea dreaptă a sistemului, rezultând o nouă


soluţie, etc.

Soluţii/ 0 1 2 3 4 5 6 7 8 9
Iteraţii
x1 0 1.000 1.095 0.994 0.992 1.001 1.000 0.999 1.000 1.000
x2 0 1.333 1.048 0.968 0.998 1.003 0.999 0.999 1.000 1.000
x3 0 0.571 1.095 1.027 0.990 0.998 1.001 1.000 0.999 1.000

Din tabel se poate observa că după a 9-a iteraţie soluţiile nu se mai schimbă.
Condiţia de ieşire în cazul problemei noastre este = 10-5. În situaţia de faţă la iteraţia a 9-a s-a
obţinut soluţia finală x1=x2=x3=1.000, deoarece la k=9 avem | | , adică
0 .

Răspuns: x1=x2=x3=1.000

Graficul pentru valorile din tabel sunt:

Programul Matlab pentru metoda iterativă Jacobi.


function x=Jacobi(a,b,vect_val_initial,epsilon)
[n,m]=size(a);
if n~=m %sistemul trebuie sa fie patratic
error('Matricea nu e patratica');
end
3
Laborator 7 2020

if n~=length(b)
error('Dimensiunea vectorului termenilor liberi este gresita');
end

a=[a b];
%rearanjam sistemul ca sa avem la a[i,i] valoarea maxima
for i=1:n
[mc,kc]=max(abs(a(i,1:n))); %linia i
[ml,kl]=max(abs(a(:,i))); % coloana i
if ml > mc
a([i kl],:)=a([kl i],:);
else
a(:,[i kc])=a(:,[kc i]);
end
end

%retinem noile a,b dupa modificarea liniilor


b=a(1:n,n+1); a=a(1:n,1:n)
% p - variabila pentru pas, pornim in loc de 0 cu 1
p=1;
% scriem solutia initiala
x(p,1:n)=vect_val_initial(1:n);
% rezolvam ecuatiile fata de necunoscuta

norma=epsilon+1;

while norma > epsilon


for i=1:n
temp=0;
for j=1:n
if i~=j
temp=temp+a(i,j)*x(p,j);
end
end
if a(i,i)~=0
x(p+1,i)=1/a(i,i)*(b(i)-temp);
else
error('a(i,i)==0');
end
end
norma=abs(x(p+1,1:n)-x(p,1:n));
p=p+1;
end

%p-1 deoarece pornesc cu p de la 1


fprintf('Numarul maxim de iteratii = %d\n',p-1)

% Apel: a, b, Jacobi(a,b,[0 0 0],0.001)

Exerciţiu I:
1. Aplicând metoda lui Jacobi rezolvaţi sistemele de ecuaţii liniare (folosind funcţia Matlab
construită la punctul 1) eroare mai mică decât 10-3. Reprezentaţi graficul soluţiilor pentru
fiecare sistem.
(Temă pentru acasă (scris-pct.b-c) – să se calculeze sistemele aplicând metoda Jacobi.
Pentru fiecare sistem se calculează soluţiile metodei Jacobi cu 3 paşi)

4
Laborator 7 2020

a) {

b) {

c) {

2. Câte iteraţii trebuie făcute pentru a găsii soluţia sistemului de la exerciţiu I punctul (a) cu o
eroare mai mică decât 10-3.
3. Modificaţi funcţia Jacobi (salvaţi cu numele Jacobi_Iteratii) astfel încât numărul de iteraţii
să fie fixat de utilizator. Funcţia va primi ca parametru numărul de iteraţii, în loc de epsilon.

Metoda iterativă Gauss – Seidel (metoda iteraţiilor succesive)


Pentru metoda iterativă Gauss-Seidel trecerea sistemului de ecuaţii (2) de la iteraţia (k) spre iteraţia
(k+1) nu se mai face simultan pentru toate ecuaţiile, ci prin utilizarea soluţiilor obţinute din ecuaţii
precedente. Pentru sistemul examinat iteraţia (k+1) se realizează prin relaţia:

( ∑ ∑ )

NOTĂ. Avantajul esenţial al acestei metode îl constituie creşterea vitezei de convergenţă, datorită
reducerii numărului total de iteraţii necesare.

Exemplu 2: Vom rezolva sistemul de la Exemplu 1 pentru a arăta rapiditatea convergenţei soluţiei
numerice la utilizarea metodei Gauss-Seidel. Ca şi la metoda lui Jacobi e nevoie mai întâi să
rearanjăm ecuaţiile în aşa fel încât fiecare necunoscută să aibă cel mai mare coeficient în modul pe
linia i şi coloana i.

{ ( ), ( )

Rezolvăm fiecare ecuaţie faţă de necunoscuta respectivă:

( )

( )

( )

{
5
Laborator 7 2020

Alegem ca o soluţie iniţială:

Considerând soluţia iniţiala în prima ecuaţie introducem


şi se obţine soluţia :

După aceasta se rezolvă a două ecuaţie introducând :

Considerând noile soluţii , se rezolvă a treia ecuaţia:

A doua iteraţie se începe prin introducerea soluţiilor în prima


ecuaţie, rezultă:

După aceasta se rezolvă a două ecuaţie introducând :

Considerând noile soluţii , se rezolvă a treia ecuaţia:

Introducem valorile obţinute pentru rezultând o nouă soluţie, etc.

Soluţii/Iteraţii 0 1 2 3 4
x1 0 1.000 1.099 0.999 1.000
x2 0 1.111 0.994 1.000 1.000
x3 0 1.032 0.999 1.000 1.000

Din tabel se poate observa că după a 4-a iteraţie soluţiile nu se mai schimbă.
Răspuns: x1=x2=x3=1.000

Exerciţiu II:

1) Implementaţi în Matlab metoda iterativă Gauss-Seidel.


function x=Gauss_Seidel(a,b,vect_val_initial,epsilon)

6
Laborator 7 2020

2) Scrieți un fișier script în Matlab pentru a verifica timpul de execuţie al funcţiei Jacobi şi al
funcţiei Gauss_Seidel pentru sistemul:

{ , unde epsilon este 10-6

Indicaţie: Folosim cronometrarea timpului cu comanda tic, respectiv toc


3) Fie sistemul Ax=b, A=[4,-1,0,-1,0,0; -1,4,-1,0,-1,0; 0,-1,4,0,0,-1; -1,0,0,4,-1,0; 0,-1,0,-1,4,-1;
0,0,-1,0,-1,4] şi b=[2;1;2;2;1;2].

Acest sistem are soluţia X=[1;1;1;1;1;1]. Folosind funcţiile Matlab de la metoda lui Jacobi
şi Gauss-Seidel, să se rezolve sistemul liniar. Ca şi aproximaţie iniţială se va folosi X(0)=0.
Precizia cu care se cer soluţiile este =0.0001. Reprezentaţi grafic rezultatele şi apoi
comparaţiile.

>> a=[4,-1,0,-1,0,0; -1,4,-1,0,-1,0; 0,-1,4,0,0,-1; -1,0,0,4,-1,0; 0,-1,0,-1,4,-1; 0,0,-1,0,-1,4];


>> b=[2;1;2;2;1;2];
>> a,b,Jacobi(a,b,[0,0,0,0,0,0],0.0001)

>> a=[4,-1,0,-1,0,0; -1,4,-1,0,-1,0; 0,-1,4,0,0,-1; -1,0,0,4,-1,0; 0,-1,0,-1,4,-1; 0,0,-1,0,-1,4];


>> b=[2;1;2;2;1;2]; Gauss_Seidel(a,b,[0,0,0,0,0,0],0.0001)

4) Fie sistemul liniar: {

(Temă pentru acasă (scris)) Să se determine soluţiile aproximative ale sistemului folosind
metoda lui Gauss-Seidel cu 3 paşi, cu X(0)=0
7