Sunteți pe pagina 1din 4

d.

METODA JACOBI

Metoda Jacobi este o metodă iterativă de calcul a soluțiilor de ecuații liniare:

𝑎11 ∙ 𝑥1 + 𝑎12 ∙ 𝑥2 + 𝑎13 ∙ 𝑥3 + … . + 𝑎1𝑛 ∙ 𝑥𝑛 = 𝑏1


𝑎21 ∙ 𝑥1 + 𝑎22 ∙ 𝑥2 + 𝑎23 ∙ 𝑥3 + … . +𝑎2𝑛 ∙ 𝑥𝑛 = 𝑏2
…………………………………………………………..
𝑎𝑖1 ∙ 𝑥1 + 𝑎𝑖2 ∙ 𝑥2 + … . +𝑎𝑖𝑖 ∙ 𝑥𝑖 + … . +𝑎𝑖𝑛 ∙ 𝑥𝑛 = 𝑏𝑖
………………………………………………………………
{ 𝑎𝑛1 ∙ 𝑥1 + 𝑎𝑛2 ∙ 𝑥2 + … … … … … … . . +𝑎𝑛𝑛 ∙ 𝑥𝑛 = 𝑏𝑛

- 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 obținându-se :
𝑎12 𝑎13 𝑎1𝑛 𝑏1
𝑥1 + ∙ 𝑥2 + ∙ 𝑥3 + … . + ∙ 𝑥𝑛 =
𝑎 𝑎 𝑎 𝑎
… … … 11… … … … …11… … … … … … …11 … … … … …11 ..
𝑎𝑖1 𝑎𝑖2 𝑎𝑖𝑛 𝑏𝑖
∙ 𝑥1 + ∙ 𝑥2 + … . +𝑥𝑖 + … . + ∙ 𝑥𝑛 =
𝑎𝑖𝑖 𝑎 𝑎𝑖𝑖 𝑎
… … … … …𝑖𝑖… … … … … … … … … … … … … … … … 𝑖𝑖
𝑎𝑛1 𝑎𝑛2 𝑏𝑛
∙ 𝑥1 + ∙ 𝑥2 + … . +𝑥𝑛 =
𝑎𝑛𝑛 𝑎𝑛𝑛 𝑎𝑛𝑛
{
- Din fiecare ecuație i se extrage necunoscuta de pe diagonala principală, 𝑥𝑖 :

𝑏1 𝑎12 𝑎13 𝑎1𝑛


𝑥1 = − ∙ 𝑥2 − ∙ 𝑥3 − … . − ∙𝑥
𝑎11 𝑎11 𝑎11 𝑎11 𝑛
……………………………………………………..
𝑏𝑖 𝑎𝑖1 𝑎𝑖2 𝑎𝑖 𝑖−1 𝑎𝑖 𝑖+1 𝑎𝑖𝑛
𝑥𝑖 = − ∙ 𝑥1 − ∙ 𝑥2 − … . − ∙ 𝑥𝑖−1 − ∙ 𝑥𝑖+1 . . . − ∙𝑥
𝑎𝑖𝑖 𝑎𝑖𝑖 𝑎𝑖𝑖 𝑎𝑖𝑖 𝑎𝑖𝑖 𝑎𝑖𝑖 𝑛
………………………………………………………
𝑏𝑛 𝑎𝑛1 ∙ 𝑥1 𝑎𝑛 𝑛−1
𝑥𝑛 = − −⋯− 𝑥
𝑎𝑛𝑛 𝑎𝑛𝑛 𝑎𝑛𝑛 𝑛−1
{
- Astfel termenul general este:
𝑛
𝑏𝑖 𝑎𝑖𝑗
𝑥𝑖 = − ∑ ∙𝑥
𝑎𝑖𝑖 𝑎𝑖𝑖 𝑗
𝑗=1,𝑖≠𝑗
𝑥1 (0)
𝑥2
.
Alegând 𝑥 = . 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:
𝑛
(𝑘+1) 𝑏𝑖 𝑎𝑖𝑗
𝑥𝑖 = − ∑ ∙ 𝑥 (𝑘)
𝑎𝑖𝑖 𝑎𝑖𝑖 𝑗
𝑗=1,𝑗≠𝑖

1
Condiția pentru convergență a lui x către soluție este:
𝑛
𝑎𝑖𝑗
∑ ∙| |<1
𝑎𝑖𝑖
𝑗=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ă.
• Aplicație:
4 ∙ 𝑥 + 𝑦 + 𝑧 = 15
{𝑥 + 3 ∙ 𝑦 + 𝑧 = 15
𝑥 + 𝑦 + 6 ∙ 𝑧 = 29
1 1 1
𝑙𝑖𝑛𝑖𝑎 1: | | + | | < 1 ⟹ < 1 𝑂𝐾
4 4 2
1 1
𝑙𝑖𝑛𝑖𝑎2 ∶ |3| + |3| < 1 𝑂𝐾
1 1
𝑙𝑖𝑛𝑖𝑎3 : |6| + |6| < 1 𝑂𝐾
𝑥 (0) 1
Alegem ca soluție de pornire :(𝑦) = (1)
𝑧 1
1 1 15 15 1 1 15 1 1
𝑥+ ∙𝑦+ ∙𝑧 = ⟹ 𝑥 (1) = − ∙ 𝑦 (0) − ∙ 𝑧 (0) = − − = 13/4
4 4 4 4 4 4 4 4 4
1 1 1 1
∙ 𝑥 + 𝑦 + ∙ 𝑧 = 5 ⟹ 𝑦 (1) = 5 − ∙ 𝑥 (0) − ∙ 𝑧 (0) = 13/3
3 3 3 3
1 1 29 (1) 29 1 (0) 1
{ ∙ 𝑥 + ∙ 𝑦 + 𝑧 = ⟹ 𝑧 = − ∙ 𝑥 − ∙ 𝑦 (0) = 9/2
6 6 6 6 6 6

𝑥 (1) 13/4 𝑥 (2)


Deci (𝑦) = (13/3), Urmeaza (𝑦) =? . . . . . . . 𝑠𝑖 𝑎𝑠𝑎 𝑚𝑎𝑖 𝑑𝑒𝑝𝑎𝑟𝑡𝑒
𝑧 9/2 𝑧
Oprirea procesului iterativ (șirul convergând către soluție) se va face atunci când
diferența dintre |𝑥 (𝑘+1) −𝑥 (𝑘) | < 𝜀, 𝑆𝐼 |𝑦 (𝑘+1) − 𝑦 (𝑘) | < 𝜀 Ș𝐼 |𝑧 (𝑘+1) − 𝑧 (𝑘) | < 𝜀

e. 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)
(𝑘+1)
se calculează în funcție de (𝑥1, … . 𝑥𝑖−1 ) deja calculate la pasul curent și
(𝑥𝑖+1 , … . 𝑥𝑛 )(𝑘) .
Relația generală este în acest caz:
𝑖−1 𝑛
(𝑘+1) 𝑏𝑖 𝑎𝑖𝑗 𝑎𝑖𝑝
𝑥𝑖 = −∑ ∙ 𝑥𝑗 (𝑘+1) − ∑ ∙ 𝑥 (𝑘)
𝑎𝑖𝑖 𝑎𝑖𝑖 𝑎𝑖𝑖 𝑝
𝑗=1 𝑝=𝑖+1
Î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ă.
2
1. Aplicaţii ale metodelor iterative: Jacobi, Gauss-Seidel.

Metoda Jacobi

Să se determine prin metoda Jacobi soluţiile sistemului:


 3  x1 + x 2 + x3 = 15

 x1 + 3  x 2 + x3 = 15
 x + x + 6  x = 29
 1 2 3

function f=jacobi
A=input('matricea atasata sistemului = ');
B=input('matricea rezultatelor = ');
pasi=input('cate iteratii? ');
[m n]=size(A);
if m~=n
disp('atentie! matricea atasata sistemului trebuie sa fie patrata!');
else
for i=1:m
conditie(i)=0;
for j=[1:(i-1) (i+1):m]
conditie(i)=conditie(i)+abs(A(i,j)/A(i,i));
end;
end;
disp('vectorul urmator trebuie sa aiba toate elem.<1');
disp(conditie);
co=input('tastati 1 daca se respecta conditia, iar pt NU orice tasta ');
if co~=1
disp('conditia de convergenta nu este respectata')
else
for s=1:m
x(s)=0;
end;
for k=1:pasi
for i=1:m
suma(i)=0;
l=[1:(i-1) (i+1):m];
suma(i)=A(i,l)*(x(l))';
y(i)=(1/A(i,i))*(B(i)-suma(i));
end;
x=y;
x
end;
x
end;
end;

3
Metoda Gauss-Seidel

Să se determine prin metoda Gauss-Seidel soluţiile sistemului:


 3  x1 + x 2 + x3 = 15

 x1 + 3  x 2 + x3 = 15
 x + x + 6  x = 29
 1 2 3

function f=gausei
A=input('matricea atasata sistemului = ');
B=input('matricea rezultatelor = ');
pasi=input('cate iteratii? ');
[m n]=size(A);
if m~=n
disp('atentie! matricea atasata sistemului trebuie sa fie patrata!');
else
for i=1:m
conditie(i)=0;
for j=[1:(i-1) (i+1):m]
conditie(i)=conditie(i)+abs(A(i,j)/A(i,i));
end;
end;
disp('vectorul urmator trebuie sa aiba toate elem.<1');
disp(conditie);
co=input('tastati 1 daca se respecta conditia, iar pt NU orice tasta ');
if co~=1
disp('conditia de convergenta nu este respectata')
else
for s=1:m
x(s)=0;
end;
for k=1:pasi
for i=1:m
suma(i)=0;
l=[1:(i-1) (i+1):m];
suma(i)=A(i,l)*(x(l))';
x(i)=(1/A(i,i))*(B(i)-suma(i));
end;
x
end;
x
end;
end;

S-ar putea să vă placă și