Documente Academic
Documente Profesional
Documente Cultură
METODA JACOBI
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
e. METODA GAUSS-SEIDEL.
Metoda Jacobi
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
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;