function[]= sor(vectorini,nmax,delta,tole,w)% METODO ITERATIVO DE GAUSS SEIDEL CON RELAJACION


A=matrizA;
B=vectorb;


k=norm(A)*norm(A^-1);%Se calcula el condicional de la matriz de coeficientes
disp('condicional=')
disp(k)
% la funcion disp nos permite imprimir una variable en el espacio de trabajo
determinante=det(A); %se calcula el determinante de la matriz de coeficiente

if determinante==0
disp('El determinante es cero, el problema no tiene solución única')
end

n=length(B);%numero de elementos del vector b
d=diag(diag(A)); %obtencion de la matriz diagonal
l=d-tril(A); %obtencion de la matriz diagonal superior L
u=d-triu(A); %obtencion de la matriz diagonal inferior u
fprintf('\n     SOLUCION:\n')
fprintf('\nLa matriz de transicion de gauss seidel:\n')
Tw=((d-w*l)^-1)*((1-w)*d+w*u); % matriz de transicion de gauss con relajacion
disp(Tw)
re=max(abs(eig(Tw))) %calculo del radio espectral

if re>1
disp('Radio Espectral mayor que 1')
disp('el método no converge')

return
end
fprintf('\nEl vector constante es::\n')
Cw=w*(d-w*l)^-1*B; % vector constante C, para el metodo con relajacion
disp(Cw)
i=0;

err=tole+1;
z=[i,vectorini(1),vectorini(2),vectorini(3),err]; %vector que me permite graficar la tabla

while err>tole & i<nmax
  
vectorinii=Tw*vectorini+Cw;

err=max(sqrt((vectorinii(1)-vectorinii(1))^2+(vectorinii(2)-vectorini(2))^2+(vectorinii(3)-vectorini(3))^2));
%err=norm(Xmejor-x); %norma 2
%err=max(abs(xi-x)); %norma 1
%err=norm(xi-x)/norm(xi); %norma relativa
vectorini=vectorinii;

i=i+1;
z(i,1)=i; 
z(i,2)=vectorini(1); 
z(i,3)=vectorini(2); 
z(i,4)=vectorini(3);
z(i,5)=err;
end
fprintf('\nTABLA:\n\n    n                  x1                  x2                  x3                 Error\n\n   ') 
disp(z) %impresion de la tabla.