x=Jacobi(A,b,
,epsilon) -
Data la matrice A non singolare ed il vettore
la funzione
risolve il sistema lineare
mediante il
metodo iterativo di
Jacobi partendo dal vettore di innesco
con una tolleranza
epsilon; la condizione di arresto è basata sul metodo del
residuo.
%JACOBI
% x=Jacobi(A,b,x0,epsilon)
% Pre: A non singolare, A(i,i) non nulli per i=1:n.
% In realta' perche'il problema sia ben condizionato,
% A deve
% essere a diagonale dominante.
% La funzione restituisce in x la soluzione del sistema Ax=b,
% risolto con il metodo semiiterativo di Jacobi.
% Riceve in x0 il vettore di innesco e in epsilon la tolleranza
% desiderata.
%
% See also GAUSS_SEIDEL, DD
function x=Jacobi(A,b,x0,epsilon)
n=length(b);
x=x0;
r=b-A*x;
while norm(r)>epsilon*norm(b)
for i=1:n
som=0;
for j=1:n
if i~=j
som=som+A(i,j)*x(j);
end
end
som=(b(i)-som)/A(i,i);
x(i)=som;
end
r=b-A*x;
end
return
A =
9 6 2
3 -12 4
7 15 -3
» b
b =
1
2
4
» Jacobi(A,b,[1;2;3],1E-9)
ans =
1.00000000008960
-0.62500000007290
-2.12500000015545
» inv(A)*b
ans =
1.00000000000000
-0.62500000000000
-2.12500000000000
» A
A =
3.0000000000 1.0000000000 0.5000000000 0.8000000000
1.5000000000 9.0000000000 0.5000000000 0.6000000000
3.2000000000 4.0000000000 12.7000000000 3.2000000000
0.7000000000 3.2000000000 4.1000000000 11.3000000000
» b
b =
0.50000000000000
1.20000000000000
3.00000000000000
6.20000000000000
» inv(A)*b
ans =
-0.01092762955907
0.09772671951632
0.08447073456824
0.49102600234596
» Jacobi (A,b,[0.01;0.09;0.1;1],1E-9)
ans =
-0.01092762960712
0.09772671950406
0.08447073461875
0.49102600233408