Vous êtes sur la page 1sur 2

function x=seidel(A,B,P,delta,max1)

%Datos:
% A : matriz invertible nxn
% B : matriz de orden nx1
% P : matriz de orden nx1:punto inicial
% delta: tolerancia para p
% max1 : numero maximo de iteraciones
% Resultados:
% X : vector solucion del sistema
% Probar con: A=[4 1 1;4 -8 1;-2 1 5];B=[7;-21;15]
% P=[1;2;2];delta=0.05; max1=20;
% Probar con: A=[4 -1 1;4 -8 1;-2 1 5];B=[7;-21;15];
% P=[1;2;2],delta=0.05; max1=20;
% Probar con:
% A=[-4 1 0 1 0 0 0 0 0;1 -4 1 0 1 0 0 0 0;0 1 -4 0 0 1 0 0 0;1 0 0 -4 1
0 1 0 0;0 1 0 1 -4 1 0 1 0;0 0 1 0 1 -4 0 0 1;0 0 0 1 0 0 -4 1 0;0 0 0 0
1 0 1 -4 1 ;0 0 0 0 0 1 0 1 -4];
%B=[-175;-75;-75;-100;0;0;-150;-50;-50]
% Solexacta=[78.5714 63.1696 42.8571 76.1161 56.2500 33.2589 69.6429
52.4554
% 33.9286]
% Ejemplo: A=[7 -2 1 2;2 8 3 1;-1 0 5 2;0 2 -1 4];B=[3;-2;5;4]; P=[0;-
1;1;1];
%
N=length(B);
%fprintf('\n\t\t iter\t\t x(1)\t\t x(2)\t\t x(3)\t\t error\n')format para
%3 variables
fprintf('\n\t\t iter\t\t x(1)\t\t x(2)\t\t x(3)\t\t x(4)\t\t error\n')
for k=1:max1
for j=1:N
if j==1
X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1);
elseif j==N
X(N)=(B(N)-A(N,1:N-1)*(X(1:N-1)'))/A(N,N);
else
%X contiene la aproximacion k-esima
%P contiene la (k-1)-esima
%X(j)=(B(j)-A(j,1:j-1)*X(1:j-1)-A(j,j+1:N)*P(j+1:N))/A(j,j)
X(j)=(B(j)-dot(A(j,1:j-1),X(1:j-1))-
dot(A(j,j+1:N),P(j+1:N)))/A(j,j);
end
end
% no se acepta norma de un vector fila
err=norm(X'-P);

%fprintf('\n\t\t\t%d\t\t%3.4f\t\t%3.4f\t\t%3.4f\t\t%3.4f\n',k,X(1),X(2),X
%(3),err) formato para 3 variables

fprintf('\n\t\t\t%d\t\t%3.4f\t\t%3.4f\t\t%3.4f\t\t%3.4f\t\t%3.4f\n',k,X(1
),X(2),X(3),X(4),err)
%relerr=err/(norm(X'));
%Se actualiza el valor de P, en bloque, al acabar la primera
iteracion
P=X';
%if (err<delta)|(relerr<delta)
if err < delta break
end
end
X'

Vous aimerez peut-être aussi