%Método de Jacobi por puntos. function [sol,it]=m_jacobi_puntos(A, b, max_it, err) disp('Método de Jacobi por puntos') disp('con gráfica de normas de sucesivos vectores residuos') disp('con gráfica de normas de sucesivos vectores u') format long e n=size(A,1); d=diag(A); if all(d) %es verdad si todos son no nulos nberr=norm(b)*err; u=rand(n,1); %es u0, vector inicial %alternativamente, u=zeros(n,1); res=b-A*u; %es residuo 0 %{ Para futura gráfica, creamos vector nres, cuyas coordenadas son las normas de los sucesivos vectores residuos. También creamos vector nu, cuyas coordenadas son las normas de los sucesivos vectores u. %OJO: MATLAB no admite coordenada 0 en un vector!!! %} nu(1)=norm(u);%subimos los superindices una unidad. nres(1)=norm(res); %subimos los superindices una unidad. k=1; while nres(k)>=nberr && k<=max_it dif=res./d; %FORMULAS PAG 204 u=u+dif; %es vector u^(k+1). METODO DE JACOBI res=b-A*u;%es residuo k+1 k=k+1; nu(k)=norm(u); nres(k)=norm(res); end sol=u; it=k-1; if nres(k)>=nberr disp('Se ha alcanzado el máximo número de iteraciones permitidas') disp('sin lograr el error relativo deseado.') end plot(nres,'r') hold on plot(nu,'b') legend('norma del residuo', 'norma de u') else error('La matriz A no admite el método de Jacobi por puntos') end end %{ probar con AA=[1 1 0; 1 3 1; 0 1 5]; b=[5 10 7].'; max_it=20; err=10^-10 %}