Académique Documents
Professionnel Documents
Culture Documents
2011-2
y=arc tg x en los nodos PROBLEMA 1: Considere los valores de la funcin x=3.2,. .. , 2, 3 a) Interpolar estos puntos mediante un spline cubico cuya derivada primera en los extremos coincida con la derivada primera de la funcin. b) Hallar la spline que pasa por dichos puntos tiene derivada tercera en los nodos -2 y 2. c) Comparar ambas aproximaciones. SOLUCION a) >> x = -3:1:3; >> y = atan(x); >> plot(x,y), title('y= arctg x'),xlabel('Eje X'),ylabel('Eje Y')
La primera derivada en los extremos es: 1 y ' =(arctg x )'= ( 1+ x 2 ) 1 y ' (3)= = y ' (3) 10 El polinomio segmentario se obtiene con MATLAB es >> ps = spline(x,[0.1 y 0.1]); >> xx = linspace(-3,3,101); >> plot(x,y,'o',xx,ppval(ps,xx),'-');
>> legend('Nodos','Funcion',2)
Los coeficientes de cada pieza del spline estn en la matriz S >> S = ps.coefs
S= -0.0011 0.0994 -0.1126 -0.1126 0.0994 -0.0011 0.0430 0.0397 0.3378 -0.0000 -0.3378 -0.0397 0.1000 0.1827 0.5602 0.8980 0.5602 0.1827 -1.2490 -1.1071 -0.7854 0 0.7854 1.1071
b) La existencia de derivada tercera en los nodos indicados exige que las dos primeras piezas del spline sean el mismo polinomio, al igual que las dos ultimas. Este es el polinomio interpolante cubico segmentario que calcula MATLAB por defecto: >> psnn = spline(x,y); >> snn = psnn.coefs snn = 0.0784 0.0784 -0.1084 -0.1084 0.0784 0.0784 -0.1454 0.2089 -1.2490 0.0899 0.1534 -1.1071 0.3253 0.5686 -0.7854 0 0.8938 0 -0.3253 0.5686 0.7854 -0.0899 0.1534 1.1071
c ) La diferencia mas apreciable entre ambas aproximaciones es la distinta convexidad en las piezas extremas.
Vamos a comprobar que cuando una funcin tiene caractersticas muy diferentes a las de los polinomios, la interpolacin polinmica con nodos equiespaciados puede resultar inadecuada. a) Obtener el polinomio de interpolacin de grado 4 que aproxima la funcin de Runge tomando nodos equeiespaciados en el intervalo [-5, 5]. b) Comprobar que, al aumentar el grado del polinomio, en vez se mejorar la aproximacin global, sta empeora. Representar los polinomios de interpolacin de grados: 4, 8, 12 y 16 junto a la funcin que aproximan. SOLUCION a) Lo primero es codificar la funcin de Runge
% Interpolacion de Newton function [c, T] = polynew(x,y,n) x = x(:); y = y(:); if nargin == 2 n = length(x) - 1; end T = y(1:n+1); for j = 2: n+1 % Filas for k = 2:j T(j,k) = (T(j,k-1)-T(j-1,k-1))/(x(j)-x(j-k+1)); end end c = flipud(diag(T)); % Evaluacion del polinomio de Newton function z = pneval(x,c,a) n = length(c) - 1; z = c(1)*ones(size(a)); for k = 1:n z = z.*(a-x(n-k+1)) + c(k+1); end
>> x = linspace(-5,5,5); >> y = feval(@f_Runge,x); >> format long >> p = polynew(x,y) p= 0.005305039787798 -0.026525198938992 0.061007957559682 0.039787798408488 0.038461538461538 Los polinomios de Newton obtenidos son:
p 0 (x )=0,038462 p 1( x)= p 0( x)+ 0,039788 (x+ 5) p 2 (x )= p 1 (x)+ 0,061008(x+ 5)(x+ 2,5) p 3 (x)= p 2 (x)0,026525 (x+ 5)(x+ 2,5) x p 4 (x )= p3 (x )+ 0,005305(x+ 5)( x+ 2,5) x( x2,5) b) El siguiente archivo M permite graficar los polinomio pedidos
% Graficando la funcion de Runge % Archivo: funcion_Runge.m xg = linspace(-5, 5); yg = 1./(1+xg.^2); for i = 1 : 4 x = linspace(-5, 5, 4*i-1); y = feval(@f_Runge,x); p = polynew(x,y); yp = pneval(x,p,xg); subplot(2,2,i); plot(x,y,'*',xg,yg,xg,yp); end
>> funcion_Runge