%---------------------------------------% Curso 2012-2013. Segundo cuatrimestre % Práctica 1: Problema 2 de la Lección 4. %---------------------------------------%------------% Apartado (1) %------------x=0:0.01:8; y=besselj(2,x); plot(x,y,'r') h=1e-5; der2=(besselj(2,2+h)-besselj(2,2))/h; der8=(besselj(2,8-h)-besselj(2,8))/(-h); disp('Aproximación de la derivada de la función de Bessel en x=2'); disp(der2); disp('Aproximación de la derivada de la función de Bessel en x=8'); disp(der8); %%%%% SOLUCIÓN %%%%% Aproximación de la derivada de la función de Bessel en x=2 0.2239 Aproximación de la derivada de la función de Bessel en x=8 0.2629 %------------% Apartado (2) %------------% Spline sujeto (con una mala elección de las derivadas en los nodos extremos) %----Construimos la función de Bessel que queremos interpolar a trozos: x=2:8;%intervalo donde construimos nuestra función valint=besselj(2,x);%función de Bessel xx=2:0.001:8;%puntos donde vamos a evaluar %%%ahora construimos el spline sujeto, en cuyo caso añadimos las dos %%%condiciones adicionales y evaluamos el polinomio en los puntos de xx para %%%representarlo. %----Gráficas de la función de Bessel y del spline sujeto figure(1) ys=spline(x,[0.0009 valint 0.5588],xx); plot(xx,besselj(2,xx),'k',x,valint,'or',xx,ys,'b--'); xlabel('x');ylabel('y'); legend('J2(x)','nodos de interpolación','spline sujeto "malo"'); %%%%% SOLUCIÓN %%%%% %------------% Apartado (3) %------------xx=2:0.001:8;%puntos donde vamos a evaluar, para cuando vayamos a representar y=besselj(2,xx); nodos=2:8;%nodos del enunciado valint=besselj(2,nodos);%función de Bessel %----Spline del apartado 2: ysm=spline(nodos,[0.0009 valint 0.5588],xx); %----Spline sujeto mejorado: %(con una buena elección de las derivadas % en los nodos extremos), %considerando der2 y der8 del apartado 1: ysb=spline(nodos,[der2 valint der8],xx); % Gráficas de la función de Bessel y del spline sujeto mejorado figure(2) plot(xx,y,'b',nodos,valint,'og',xx,ysb,'r'); xlabel('x');ylabel('y'); legend('J2(x)','nodos de interpolación','spline sujeto mejorado'); %----Spline not-a-knot ynk=spline(nodos,valint,xx); % Gráficas de la función de Bessel y del spline not-a-knot figure(3) plot(xx,y,'b',nodos,valint,'og',xx,ynk,'r'); xlabel('x');ylabel('y'); legend('J2(x)','nodos de interpolación','spline not-a-knot'); % Errores de los splines sujeto mejorado y not-a-knot errorssm=max(abs(y-ysm)); errorssb=max(abs(y-ysb)); errorsnk=max(abs(y-ynk)); disp(' '); disp('Error del spline sujeto malo'); errorssm disp('Error del spline sujeto mejorado'); errorssb disp('Error del spline not-a-knot'); %disp(max(abs(besselj(2,xs)-ysk))); errorsnk %%%%% SOLUCIÓN %%%%% %------------% Apartado (4) %------------%----Polinomio interpolador nodos=2:8;%nodos del enunciado valint=besselj(2,nodos);%función de Bessel xx=2:0.001:8;%puntos donde vamos a evaluar, para cuando vayamos a representar y=besselj(2,xx); ynewt=polintnewton(nodos,valint,xx);%pol. de Newton para la función de Bessel disp(' '); disp('Error del polinomio interpolador'); errorpnewt=max(abs(y-ynewt)) % Gráficas de la función de Bessel y del polinomio interpolador figure(4) plot(xx,y,'b',xx,ynewt,'r',nodos,valint,'og'); xlabel('x');ylabel('y'); legend('J2(x)','polinomio interpolador de Newton','nodos de interpolación'); ynewt=interpolanewt(nodos,valint,x); %%%%% SOLUCIÓN %%%%% Error del polinomio interpolador ans = 0.0033 %------------% Apartado (5) %------------a=2; b=8; xx=a:0.001:b; y=besselj(2,xx); tabla=[]; h=10^(-5); dva=(besselj(2,a+h)-besselj(2,a))/h; dvb=(besselj(2,b+h)-besselj(2,b))/h; N=12; for k=1:3 p=(b-a)/N; x=a:p:b; valint=besselj(2,x); % Polinomio interpolador pnt=polintnewton(x,valint,xx); % Spline sujeto spj=spline(x,[dva valint dvb],xx); % Spline not-a-knot spk=spline(x,valint,xx); % Errores del polinomio interpolador y de los splines sujeto y not-a-knot errpnt=max(abs(y-pnt)); errspj=max(abs(y-spj)); errspk=max(abs(y-spk)); tabla=[tabla;N errpnt errspj errspk]; % Gráficas de la función de Bessel, del polinomio interpolador y de % los splines sujeto y not-a-knot (se representan los nodos) figure(k+4); plot(x,valint,'ko',xx,y,'b',xx,pnt,'r',xx,spj,'g',xx,spk,'m'); xlabel('x');ylabel('y'); title(['N=',num2str(N)]); legend('nodos','J2(x)','pol interpolador','spline sujeto',... 'spline not-a-knot','Location','SouthWest'); N=2*N; end disp(' '); disp('Errores del polinomio de interpolación y de los splines sujeto'); disp('y not-a-knot (intervalo [2,8])'); disp(tabla); % Representación gráfica de los errores del polinomio interpolador y % de los splines sujeto y not-a-knot frente al número de nodos figure(9); loglog(tabla(:,1),tabla(:,2),'bo-',tabla(:,1),tabla(:,3),'ro-',... tabla(:,1),tabla(:,4),'mo-'); xlabel('N');ylabel('Error'); title('Errores (intervalo [2,8])'); legend('polinomio interpolador','spline sujeto',... 'spline not-a-knot'); %%%%% SOLUCIÓN %%%%% Errores del polinomio de interpolación y de los splines sujeto y not‐a‐knot (intervalo [2,8]) 12.0000 0.0000 0.0000 0.0003 24.0000 0.0000 0.0000 0.0000 48.0000 0.0001 0.0000 0.0000 %------------% Apartado (6) %------------a=0; b=8; xs=a:0.001:b; f=besselj(2,xs); tabla=[]; h=10^(-5); dva=(besselj(2,a+h)-besselj(2,a))/h; dvb=(besselj(2,b+h)-besselj(2,b))/h; N=16; for k=1:3 p=(b-a)/N; x=a:p:b; y=besselj(2,x); % Polinomio interpolador pnt=polintnewton(x,y,xs); % Spline sujeto spj=spline(x,[dva y dvb],xs); % Spline not-a-knot spk=spline(x,y,xs); % Errores del polinomio interpolador y de los splines sujeto y not-a-knot errpnt=max(abs(f-pnt)); errspj=max(abs(f-spj)); errspk=max(abs(f-spk)); tabla=[tabla;N errpnt errspj errspk]; % Gráficas de la función de Bessel, del polinomio interpolador y de % los splines sujeto y not-a-knot (se representan los nodos) figure(k+9) plot(x,y,'ko',xs,f,'b',xs,pnt,'r',xs,spj,'g',xs,spk,'m') xlabel('x');ylabel('y'); title(['N=',num2str(N)]); legend('nodos','J2(x)','pol interpolador','spline sujeto',... 'spline not-a-knot','Location','NorthEast'); N=2*N; end disp(' '); disp('Errores del polinomio de interpolación y de los splines sujeto') disp('y not-a-knot (intervalo [0,8])'); disp(tabla); % Representación gráfica de los errores del polinomio interpolador y % de los splines sujeto y not-a-knot frente al número de nodos figure(13) loglog(tabla(:,1),tabla(:,2),'bo-',tabla(:,1),tabla(:,3),'ro-',... tabla(:,1),tabla(:,4),'mo-'); xlabel('N');ylabel('Error'); title('Errores (intervalo [0,8])'); legend('polinomio interpolador','spline sujeto',... 'spline not-a-knot','Location','NorthWest'); %%%%% SOLUCIÓN %%%%% Errores del polinomio de interpolación y de los splines sujeto y not‐a‐knot (intervalo [0,8]) 16.0000 0.0000 0.0000 0.0004 32.0000 0.0000 0.0000 0.0000 64.0000 2.5827 0.0000 0.0000