Documente Academic
Documente Profesional
Documente Cultură
Grupa 523B
Metode numerice
Tema 1
Sa se rezolve sistemul de ecuatii liniare prin metodele Jacobi si Gauss_Seidel. Sa se
realizeze un studiu comparativ care sa evidentieze viteza de convergenta catre solutia
sistemului in cele doua cazuri(se vor prezenta comparativ rezultatele obtinute dupa fiecare pas
si numerele de pasi care duc catre o solutie pentru aceleasi date initiale: eroare si solutie
aproximata).
10 x1 + x 2 + x3 + x 4 =13
{
−x1 +10 x 2+ x 3−x 4=9
2 x 1−x 2 +10 x 3 −x 4=10
x 1+ x2 −x3 +10 x 4=11
Metoda Gauss-Seidel:
Metoda Gauss-Seidel este o metodă ce derivată din metoda Jacobi. La
metoda Jacobi 𝑥1 (𝑘+1) se calculează în funcție de (𝑥2 … . 𝑥𝑛) (𝑘) , 𝑥2 (𝑘+1) în
funcție de (𝑥1 ∙ 𝑥3 ∙ … .∙ 𝑥𝑛 ) (𝑘) și în general : 𝑥𝑖 (𝑘+1) se calculează în funcție de
(𝑥1, 𝑥2, 𝑥3 … . , 𝑥𝑖−1, 𝑥𝑖+1, … . , 𝑥𝑛 ) (𝑘) Metoda Gauss-Seidel accelerează
procesul de convergență calculând 𝑥1 (𝑘+1) în funcție de (𝑥2, … . , 𝑥𝑛) (𝑘) , 𝑥2
(𝑘+1) în funcție de 𝑥1 (𝑘+1)𝑑𝑒𝑗𝑎 𝑐𝑎𝑙𝑐𝑢𝑙𝑎𝑡 𝑙𝑎 𝑝𝑎𝑠𝑢𝑙 𝑐𝑢𝑟𝑒𝑛𝑡 și (𝑥3 … . 𝑥𝑛) (𝑘) . La
modul general 𝑥𝑖 (𝑘+1) se calculează în funcție de (𝑥1, … . 𝑥𝑖−1) (𝑘+1) deja
calculate la pasul curent și (𝑥𝑖+1, … . 𝑥𝑛 ) (𝑘) . Relația generală este în acest caz:
În rest metoda este similară celei anterioare, oprirea procesului iterativ făcându-
se la fel, adică atunci când diferența dintre |𝑥 (𝑘+1)−𝑥 (𝑘) | < 𝜀, unde 𝜀 este
eroarea acceptată.
function f = Metoda_gauss_seidel
val_abs = 0;
[m n] = size(A);
if m == n,
i = 1;
conditie(i) = 0;
for j = 1 : m
endfor
conditie(i) = conditie(i) - 1;
endfor
disp(conditie);
if validare == 1
for s = 1 : m
x(s) = 0;
endfor
else
endif
for i = 1 : m
suma(i) = 0;
p = [1 : (i - 1) (i + 1) : m];
suma(i)=A(i, p)*(x(p))';
end
d = x(i - 1);
end
L = k + 1;
break;
end
end
else
endif
disp(A);
disp(B);
disp(x);
disp(L);
endfunction
Rezultate
>> Metoda_gauss_seidel
x=
1.3000 0 0 0
x=
1.3000 1.0300 0 0
x=
x=
x=
x=
x=
x=
x=
10 1 1 1
-1 10 1 -1
2 -1 10 -1
1 1 -1 10
matricea B este:
13 9 10 11
vectorul x este:
Metoda Jacobi:
Metoda Jacobi este o metodă iterativă de calcul a soluțiilor de ecuații
liniare. Se împarte fiecare dintre liniile i ale sistemului de ecuații cu elementul de
pe diagonala principală 𝑎𝑖𝑖 a matricei atașate, cu i=1..n. Din fiecare ecuație i se
extrage necunoscuta de pe diagonala principală. Astfel termenul general este:
Alegand pentru pornirea calculului iterativ,
numită generic valoare
inițială, se vor calcula 𝑥1, 𝑥2, … . , 𝑥𝑛 la pasul (1) , notata general x(1) cu relațiile
generală 𝑥𝑖 (1). La modul general, cunoscând x la pasul k, se poate calcula x la
pasul k+1:
(fără a fi suficient, se poate însă observa inițial, fără nici un calcul dacă pe
diagonala principală se găsesc elementele maxime în modul). Oprirea procesului
iterativ (dacă șirul converge către soluție) se va face atunci când diferența dintre
|𝑥(𝑘+1)−𝑥(𝑘)| < 𝜀, unde 𝜀 este eroarea acceptată.
Codul programului
function f=Metoda_jacobi
[m n]=size(A);
if m==n,
i=1;
for i=1:m % aici se verifica daca sistemul are solutii
conditie(i)=0;
for j=1:m
conditie(i) =conditie(i)+abs(A(i,j)/A(i,i));
endfor
conditie(i)=conditie(i)-1;
endfor
disp (conditie);
if validare==1,
for s=1:m
x(s)=0;
endfor
else
endif
for i=1:m
suma(i)=0;
p=[1:(i-1) (i+1):m];
suma(i)=A(i,p)*(x(p))';
y(i)=(B(i)-suma(i)) / A(i,i);
endfor
L = k + 1;
break;
endif
x=y;
endfor
x
else
endif
disp(A);
disp(B);
disp(x);
disp(L);
endfunction
Rezultate:
>> Metoda_jacobi
Concluzie
Metoda Gauss-Seidel este mai rapida decat metoda Jacobi .Metoda Gauss-
Seidel a ajuns mai rapid la eroarea impusa numarul de iteriatii fiind doar 3 fata de
de metoda Jacobi care a avut de nevoie de 5 .