L4P2 Bessel (Miercoles)

Anuncio
%---------------------------------------% 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 
Descargar