Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales Matemáticas de la Especialidad Ingeniería Eléctrica Funciones de interpolación y aproximación José Luis de la Fuente O’Connor [email protected] [email protected] Clase_interpolación_aproximación_funciones_2014.pdf 1/57 Índice Introducción Interpolación polinómica Polinomios de Lagrange Polinomios de Newton Polinomios Ortogonales Interpolación polinómica por trozos Interpolación de Hermite Interpolación por splines cúbicas 2/57 TY OF TECHNOLOGY SCHOOL OF CIVIL ENGINEERING Introducción al Interpolation 0 40 60 80 20 km/h 80 100 12 0 0 1 120 0 4 kmh 100 11 12 1 10 2 9 3 4 8 7 5 6 Vehicle speed is approximately 49 km/h 3/57 Why Splines? nterpolation tru m gr sm ho sm ke sp ba int T. Gambill (UIUC) CS 357 La interpolación tiene como objeto, en general, la obtención de nuevos e ”contain” our interpolation? puntos a partir del conocimiento de un conjunto discreto de ellos. (Adobe): rasterization on-the-fly. Fonts, etc are defined as 4/57 to plot una a smooth curveque (a continuous differentiable function) La idea Ies Try obtener función se verifique en todos los puntos conocidos y connecting these discrete points. que permita calcular tantos nuevos como se desee. La interpolación tiene como objeto la obtención de nuevos puntos a partir del conocimiento un conjunto Interpolation betweendedata points discreto de ellos. Por ejemplo, encontrar Por ejemplo, encontrar de yun paraxuncualquiera x cualquiera en un el valor de yel valor para en un experimento en Consider a set of xy data collected during an experiment. experimento en el technique que se han obtenidoy at unx conjunto de puntos We use interpolation to estimate where there’s no data. .x; y/. el que se han obtenido un conjunto de puntos .x; y/. y Datos knownconocidos data y ¿Cuál is esthe el valor de What y que corresponde a corresponding value of y for este x? this x ? x 5/82 La interpolación se puede como lo inverso de la evaluación de una función. BASIC ver IDEAS a b c d e f h i j g 1 2 3 9 4 6 10 8 7 5 En ésta, se pide evaluar un valor de y para un valor dado de x. En la From the known data ( x , y ), interpolate yˆ = F ( xˆ ) for xˆ ≠ x x y interpolación, dados esos puntos, calcular la que pueda generarlos. y función F(x) i 1 1 i i 5/57 La aproximación busca obtener una función que de resultados tan cercanos como sea posible a los de otra, o a un conjunto de datos, no necesariamente pasando por todos ellos. Por ejemplo, aproximar una función para evitar tener que evaluar su “complicada” expresión: la de la distribución normal estándar, 1 N.x/ D p 2 x ˇ e y 2 =2 dy: 1 Obtener una función teórica preestablecida que mejor se ajusta a puntos empíricos (ajustes por mínimos cuadrados). También, poder derivar o integrar valores dados en forma de tabla. Hacer pasar por datos discretos funciones continuas y derivables, : : : 6/57 InterpolaciónInterpolation vs. aproximación o ajuste. v.s. Curve Fitting Interpolación vs. aproximación y ajuste. yy known data Datos conocidos curve fit aproximada Función interpolation Interpolación x x Curve fitting: fit function data notuna exactly agree o el El ajuste, en general, busca &predecir tendencia de datospasses de acuerdo un modelo En general, comportamiento Interpolation: function exactlycon through known dado; data la interpolación, que la función, o funciones, a que de lugar incluya la aproximación o ajuste busca predecir una tendencia, o el todos los datos conocidos, habitualmente buenos. comportamiento de datos, acorde con un modelo establecido; 8/83 Interpolation & función, Extrapolation la interpolación que la o funciones, a que de lugar incluya todos los datos conocidos, habitualmente buenos. Interpolation approximate within the range of independent variable a b c d e f h i j g 1 2 3 9 4 6 10 8 7 of the given data set. 5 7/57 Numéricamente: para obtener una función f .x/ de interpolación, un primer enfoque consiste en obtenerla como combinación lineal de un conjunto de funciones base. Si se considera un conjunto de n funciones base, j , j D 1; : : : ; n, se pretende que f .x/ D n i cj j .x/: j D1 Las funciones base pueden ser diversas: Polinomios, polinomios por trozos o porciones Funciones racionales Funciones trigonométricas Otras. 8/57 Si se tienen m datos (de un muestreo de una función, de un experimento, etc.) a los que se quiere aproximar una función, y n funciones base, después de un sencillo proceso se llega a un sistema de ecuaciones lineales n i cj j .xi / D f .xi /; i D 1; : : : ; m: j D1 Este sistema: Si m > n, lo normal es que sea incompatible y habría que resolverlo mediante técnicas de mínimos cuadrados. Si m < n, el sistema tendrá muchas soluciones. Si m D n se puede determinar una única función. 9/57 Comprobar, ejecutar y discutir el fichero Interpolacion_eje1.m xdat = [1 5 10 30 50]; ydat = log(xdat); plot(xdat,ydat, ’o’) hold on >> Interpolacion_eje1 p = -0.0022 0.1802 p = -0.0000 0.0017 pause p = polyfit(xdat,ydat,2) xvet=1:0.1:50; plot(xvet,polyval(p,xvet)) hold on 0.3544 -0.0529 0.6705 -0.6192 pause p = polyfit(xdat,ydat,4) plot(xvet,polyval(p,xvet)) 6 5 4 3 2 1 0 -1 0 5 10 15 20 25 30 35 40 45 50 10/57 Clases EPFL: Position du problème 11/57 Interpolación polinómica Teorema principal de la interpolación polinómica Sean .x1; y1/, .x2; y2/, : : : ; .xn; yn/ n duplas de puntos con distintas xi . Existe un polinomio, y sólo uno, P , de grado n 1 o menor, que satisface P .xi / D yi , i D 1; : : : ; n. La polinómica es la forma más extendida de interpolación. En la expresión n i cj j .xi / D f .xi /; i D 1; : : : ; n; j D1 como funciones base se escogen los monomios j .x/ D x j 1. Da lugar a pn 1.x/ D c1 C c2x C c3x 2 C 2 C cnx n 1 cuyos coeficientes ci son la3 3 2 3 2 1 x1 x1n 1 c1 f .x1/ 7 6 7 6 7 6 n 1 / 2 solución del sistema lineal1 Ac D 41:: x::2 : : x2:: 5 4c::2 5 D 4f .x ::: 5. : : : : : cn f .xn/ 1 xn xnn 1 1 A es una matriz de Vandermonde 12/57 Ejemplo. Consideremos los precios de gas natural que siguen: Año x 2007 2008 2009 2010 2011 2012 Precio y 133,5 132,2 138,7 141,5 137,6 144,2 year=[2007 2008 2009 2010 2011 2012]’; precio=[133.5 132.2 138.7 141.5 137.6 144.2]’; M = vander(year); a = M\precio; x=linspace(min(year),max(year)); p=polyval(a,x); plot(year,precio ,’o’,x,p,’-’); 13/57 Copiar y pegar en Matlab. Luego usar Interpolacion_eje2. year=[2007 2008 2009 2010 2011 2012]’; precio=[133.5 132.2 138.7 141.5 137.6 144.2]’; M = vander(year); a = M\precio; x=linspace(min(year),max(year)); p=polyval(a,x); plot(year,precio ,’o’,x,p,’-’); hold on pause >> Interpolacion_eje2 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 7.482181e-033. > In Interpolacion_eje2 at 4 x1 = 2007:1:2012; y = interp1(year,precio,x1,’linear’); plot(year,precio,’o’,x1,y,’-’) hold on pause 146 ys = year-mean(year); A = vander(ys); a = A\precio; ds = x - mean(year); p = polyval(a,ds); plot(year,precio,’o’,x,p,’-’); 144 142 140 138 136 134 132 130 128 2006 2006.5 2007 2007.5 2008 2008.5 2009 2009.5 2010 2010.5 2011 14/57 Polinomios de Lagrange Si se tienen dos puntos .x1; y1/ y .x2; y2/, el polinomio lineal que los interpola es siendo los coeficientes c1 y c2: c1 D p1.x/ D c1 C c2x; y1 x 2 x2 y2 x 1 x1 y c2 D y2 x2 y1 : x1 Sustituyéndolos en la expresión de p1.x/, y reordenándola, queda p1.x/ D y1 x x1 x2 x C y2 x2 x2 x1 D y1l1.x/ C y2l2.x/: x1 l1 y l2 son los polinomios de interpolación de Lagrange de primer orden. 15/57 En general, para un conjunto de datos, .xi ; yi /, i D 1; : : : ; n, las funciones base de Lagrange en Pn 1 son n Y lj .x/ D kD1 k¤j n Y .x .xj xk / j D 1; : : : ; n: ; xk / kD1 k¤j Las funciones lj .x/ son polinomios de grado n 1 y cumplen que ( lj .xi / D ıij D 1 si i D j 0 si i ¤ j ; i; j D 1; : : : ; n: 16/57 x D Œ0 0;25 0;50 0;75 1T . Funciones base de Lagrange para x=[0.00, 0.25, 0.50, 0.75, 1.00] 1.2 l2 1 l4 0.8 l3 0.6 l1 l5 lk(x) 0.4 0.2 0 −0.2 −0.4 −0.6 0 0.1 0.2 0.3 0.4 0.5 x 0.6 0.7 0.8 0.9 1 15/83 Con esta base, la matriz de antes, A, ya no es la de Vandermonde, sino la identidad, I, y el polinomio de interpolación a d h b e c f g 1 2 3 9 4 6 5 pn 1.x/ D y1l1.x/ C y2l2.x/ C C ynln.x/: i j 10 8 7 17/57 Código de Matlab para obtener la interpolación con polinomios de Lagrange. function [l,L]=lagrang_int(x,y) % Calcula el polinomio de interpolación de Lagrange % x e y vectores de datos; l, coeficientes polinomio resultante, % L polinomio base N=length(x)-1; l=0; for m=1:N+1 P=1; for k=1:N+1 if k~=m, P=conv(P,poly(x(k)))/(x(m)-x(k)); end end L(m,:)=P; % Polinomios de Lagrange base l=l+y(m)*P; % Coeficientes el polinomio resultante end % do_Lagrange_int x = [-2 -1 1 2]; y=[-6 0 0 6]; l = lagrang_int(x,y) xx = [-2:0.02:2]; yy = polyval(l,xx); plot(xx,yy,’b’,x,y,’o’) 18/57 El resultado es el de la figura. 6 4 2 0 −2 −4 −6 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 19/57 Volvamos sobre el problema de los precios del gas natural. % do_Lagrange_int_gas_1 year = [2007 2008 2009 2010 2011 2012]’; precio= [133.5 132.2 138.7 141.5 137.6 144.2]’; ys = year-mean(year); l = lagrang_int(ys,precio) x = linspace(min(year),max(year),200); ds = x - mean(year); p=polyval(l,ds); plot(year,precio ,’o’,x,p,’-’); 145 140 135 130 2007 2008 2009 2010 2011 2012 20/57 Polinomios de Newton El polinomio de interpolación de Newton tiene la forma pn 1.x/ D c1 C c2.x x1/ C c3.x x1/.x x2/C C cn.x x1/.x x2/ .x xn 1/: Las funciones base de Newton son j .x/ D j 1 j .x xk /; j D 1; : : : ; n: kD1 Para i < j , j .xi / D 0, por lo que la matriz A es triangular inferior, con aij D j .xi /. 21/57 En la figura se ven las funciones base de Newton para En la figura se ven las funciones base de Newton para x D Œ0 0;50 1;00 1;50 2T . T x D Œ0 0;50 1;00 1;50 2 . Funciones base de Newton para x=[0.00, 0.50, 1.00, 1.50, 2.00] 3 2.5 Newk(x) 2 1.5 1 1 2 0.5 3 4 5 0 −0.5 0 0.2 0.4 0.6 0.8 1 x 1.2 1.4 1.6 1.8 2 22/57 22/58 Ejemplo Calculemos el polinomio de interpolación de Newton para los puntos . 2; 27/, .0; 1/ y .1; 0/. El sistema que hay que resolver es 2 1 41 1 Sustituyendo 0 x2 x3 x1 x1 .x3 0 0 x1/.x3 32 3 2 3 c1 y1 5 4c25 D 4y25 : x2 / c3 y3 2 32 3 2 3 1 0 0 c1 27 41 2 05 4c25 D 4 15 ; 1 3 3 c3 0 cuya solución es c D Œ 27 13 p.x/ D 4T . El polinomio es pues 27 C 13.x C 2/ 4.x C 2/x: 23/57 El cálculo polinomio de interpolación de Newton se puede optimizar usando las diferencias divididas. Volviendo a la expresión matricial general anterior para un polinomio de segundo grado, 2 1 41 1 0 x2 x3 x1 x1 .x3 0 0 x1/.x3 32 3 2 3 c1 y1 5 4c25 D 4y25 ; x2/ c3 y3 si se sustrae de la segunda fila la primera, y de la tercera también la primera, se tiene 3 2 32 3 2 1 0 0 c1 y1 40 x2 x1 5 4c25 D 4y2 y15 : 0 0 x3 x1 .x3 x1/.x3 x2/ c3 y3 y1 24/57 Si se divide la segunda fila por .x2 x1/ y la tercera por .x3 x1/ se llega a 2 2 1 40 0 0 1 1 y1 32 3 6 6 y2 0 c1 6 0 5 4c25 D 6 6 x2 6 x 3 x2 c3 4 y3 x3 De la segunda fila se obtiene que c2 D .y2 3 y1/=.x2 7 y1 7 7 x1 7 7: 7 y1 5 x1 x1/. Se introducen ahora las diferencias divididas de primer orden f Œx1; x2 y2 x2 y1 x1 y f Œx1; x3 y3 x3 y1 : x1 25/57 Si se sustrae la tercera fila de la segunda se llega a 3 2 32 3 2 y1 1 0 0 c1 6 7 40 1 0 5 4c25 D 4 f Œx1; x2 5: 0 0 x3 x2 c3 f Œx1; x3 f Œx1; x2 Si se divide la tercera fila por x3 x2 se llega a 3 2 32 3 2 y1 1 0 0 c1 7 40 1 05 4c25 D 6 4 f Œx1; x2 5 ; 0 0 1 c3 f Œx1; x2; x3 donde f Œx1; x2; x3 f Œx1; x3 x3 f Œx1; x2 x2 no trivial D f Œx2; x3 x3 f Œx1; x2 : x1 26/57 Lo no trivial f Œx1 ; x3 x3 f Œx1 ; x2 x2 D D y2 y1 x2 x1 y3 y1 x3 x1 x3 y3 y2 x3 x2 x2 C y2 y1 x3 x2 D .x3 x1 / .x3 y3 y1 x3 x1 x2 /.x3 .y2 y1 /.x3 x2 / .x2 x1 /.x3 x2 / x3 y2 y1 x2 x1 x1 / D .y2 y1 /.x2 x1 / .x2 x1 /.x3 x2 / x1 y3 D y2 C y2 y3 y2 x3 x2 x3 y1 .x3 x2 /.x3 y2 y1 x2 x1 x1 D y2 y1 x2 x1 x2 C x2 .x3 x1 / x1 / f Œx2 ; x3 x3 f Œx1 ; x2 x1 Con estas fórmulas de recurrencia, para un polinomio de segundo grado, c1 D f Œx1 D c2 D f Œx1; x2 D y1 y2 x2 f Œx2; x3 c3 D f Œx1; x2; x3 D x3 En general f Œxi ; : : : ; xj D y1 x1 f Œx1; x2 D x1 f ŒxiC1; : : : ; xj xj y3 y2 x3 x2 x3 y2 y1 x2 x1 x1 f Œxi ; : : : ; xj 1 : xi 27/57 Las diferencias divididas se pueden calcular en forma de tabla x f Œ x1 f Œx1 f Œ; f Œ; ; f Œ; ; ; f Œx1; x2 x2 f Œx2 f Œx1; x2; x3 f Œx2; x3 x3 f Œx3 f Œx1; x2; x3; x4 f Œx2; x3; x4 f Œx3; x4 x4 f Œx4 28/57 Ejemplo Calcular el polinomio de interpolación de Newton de x 1 3 2 0 2 y 3 13 4 3 5 3 La tabla de diferencias divididas es: x 1 3 2 0 2 f Œ f Œ; f Œ; ; f Œ; ; ; 3 13 4 1 2 1 6 3 5 3 2 3 1 3 2 5 3 29/57 El polinomio es entonces p3.x/ D 3 C 12 .x D 3 1/ C 31 .x 16 10 x C x2 3 3 1/ x 3 2 2.x 1/ x 3 2 x 2x 3: Este programa realiza la interpolación de Newton. function [n,DD]=Newton_int_1(x,y) % Interpolación con polinomios de Newton % Vectores de entrada x e y; salida: coeficientes en n y dif. en DD N = length(x)-1; DD = zeros(N+1,N+1); DD(1:N+1,1) = y(:); for k=2:N+1 for m=1:N+2-k DD(m,k)=(DD(m+1,k-1)-DD(m,k-1))/(x(m+k-1)-x(m)); % Diferencias divididas end end a = DD(1,:); n = a(N+1); for k=N:-1:1 n = [n a(k)] - [0 n*x(k)]; end % n(x)*(x-x(k-1))+a_k-1 30/57 Ahora resolvamos un ejemplo cualquiera con este programa. %do_newton_int_1.m x=[-2 -1 1 2 4]; y=[-6 0 0 6 60]; % datos ordenados [n,DD] = Newton_int_1(x,y) n0 = lagrang_int(x,y) % por comparar con Lagrange x = [1 2 4 -1 -2]; y=[0 6 60 0 -6]; % orden aleatorio datos [n1,DD]= Newton_int_1(x,y) xx = [-2: 0.02 : 4]; yy = polyval(n,xx); clf, plot(xx,yy,’b-’,x,y,’o’) % se dibuja último caso 60 50 40 30 20 10 0 −10 −2 −1 0 1 2 3 4 31/57 La salida de Matlab sería (¡ojo! coeficientes=pol. Lagrange): >> do_newton_int_1 n = 0 1 0 -1 0 DD = -6 6 -2 1 0 0 0 2 1 0 0 6 7 0 0 6 27 0 0 0 60 0 0 0 0 n0 = Columns 1 through 3 0.000000000000000 1.000000000000000 Columns 4 through 5 -1.000000000000000 0 n1 = 0 1 0 -1 0 DD = 0 6 7 1 0 6 27 5 1 0 60 12 1 0 0 0 6 0 0 0 -6 0 0 0 0 >> 0.000000000000000 32/57 Resolvamos a mano el ejemplo anterior con la tabla. >> x=[1 3/2 0 2]; >> y=[3 13/4 3 5/3]; >> [n DD]=Newton_int_1(x,y) n = Columns 1 through 3 -2.000000000000000 5.333333333333334 Column 4 3.000000000000000 DD = Columns 1 through 3 3.000000000000000 0.500000000000000 3.250000000000000 0.166666666666667 3.000000000000000 -0.666666666666667 1.666666666666667 0 Column 4 -2.000000000000000 0 0 0 >> -3.333333333333334 0.333333333333333 -1.666666666666667 0 0 33/57 Polinomios Ortogonales Otra base interesante para interpolación es la del espacio vectorial de polinomios ortogonales Pn. El producto interior de dos polinomios p y q, hp; qi, en el intervalo Œa; b, se define como hp; qi D l b p.x/q.x/!.x/ dx; a donde !.x/ es una función de peso no negativa. Los polinomios p y q son ortogonales si hp; qi D 0. Un conjunto de polinomios fpi g es ortonormal si ( hpi ; pj i D 1 para i D j 0 para i ¤ j: 34/57 Se puede usar cualquier procedimiento de ortogonalización, por ejemplo Gram-Schmidt, para obtener una base ortonormal de un espacio de polinomios. Por ejemplo, si !.x/ D 1, y en el intervalo Œ 1; 1 se aplica Gram-Schmidt a los monomios 1, x, x 2, x 3; : : :, escalando los resultados para que pk .1/ D 1, para cada k, se obtienen los polinomios de Legendre 1; x; .3x 2 .35x 4 1/=2; .5x 3 3x/=2; 30x 2 C 3/8; .63x 5 70x 3 C 15x/=8; : : : ; los primeros n de los cuales forman una base ortogonal de Pn 1. Su fórmula general es 1 di 2 i .x 1/ : pi .x/ D i 2 i Š dx i 35/57 En la figura se representan los seis primeros polinomios de Legendre. Otros polinomios ortogonales conocidos: Polinomio Símbolo Intervalo Legendre Pk Œ 1; 1 Chebyshev, primer tipo Tk Œ 1; 1 Chebyshev, segundo tipo Uk Œ 1; 1 Jacobi Jk Œ 1; 1 Laguerre Lk Œ0; 1/ Hermite Hk . 1; 1/ Función de peso 1 .1 x 2 / 1=2 .1 x 2 /1=2 .1 x/˛ .1 C x/ˇ ; ˛; ˇ > e x 2 e x 1 36/57 Los polinomios ortogonales tienen propiedades muy útiles para algoritmos numéricos. Satisfacen fórmulas de recurrencia que los hacen fáciles de generar y evaluar: pkC1.x/ D .˛k x C ˇk /pk .x/ k pk 1.x/: La de los polinomios de Legendre, por ejemplo, es .k C 1/PkC1.x/ D .2k C 1/xPk .x/ kPk 1.x/: También se usan frecuentemente para aproximar por mínimos cuadrados funciones mediante polinomios de cualquier grado, pues la ortogonalidad hace que la matriz del sistema que se resuelve sea diagonal. 37/57 Los polinomios de Chebyshev son otro tipo de polinomios de uso frecuente. En su forma trigonométrica se definen, para x 2 Œ 1; 1, por la identidad Tk .x/ D cos.k arc cos.x// además de que T0.x/ D 1 y T1.x/ D 1. La fórmula de recurrencia de tres términos es TkC1.x/ D 2xTk .x/ Tk 1.x/: Los primeros son pues 1; x; 2x 2 8x 4 1; 4x 3 3x; 8x 2 C 1; 16x 5 20x 3 C 5x; : : : ; 38/57 Los cinco primeros los representa esta gráfica. Su propiedad quizás más interesante es la equialternancia, o equioscilación, pues los sucesivos puntos extremos tienen igual magnitud pero signo distinto, como se aprecia en la figura. 39/57 En interpolación polinómica de puntos de una función continua, el error máximo en un intervalo se minimiza si se escogen como puntos de interpolación las raíces de los extremos de un polinomio de Chebyshev de grado adecuado: los nudos o puntos de Chebyshev. Los puntos de un polinomio de Chebyshev Tk son los k ceros o raíces de ese polinomio, es decir, 2i 1 ; xi D cos 2k i D 1; : : : ; k y los k C 1 puntos extremos (máximos y mínimos), incluidos los de los extremos del intervalo, es decir i xi D cos ; i D 0; : : : ; k: k 40/57 If we know a great deal about the function f , then we may be able to choose points so as Losthepuntos dewe Chebyshev lasinformation abcisas deabout los puntos igualmente espaciados educe error. If don’t haveson such the function, however, the best awe o is lo to largo reducede thelaproduct (a). The Chebyshev minimize the maximum valu semicircunferencia de radiopoints 1 en effectively R 2. he product (a). 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Figure 1: Choosing Chebyshev Points Usar puntos de Chebyshev como abcisas de interpolación, en vez de puntos igualmente espaciados, tieneChebyshev ventajas interesantes. ejemplo, quiere in Figure Recall the process for selecting points over an Por interval [a, b], se as shown interpolar puntos de la función de Runge 1. Draw the semicircle on [a, b] centered at the midpoint ((a + b)/2). 1 2. To select N + 1 points, split the f semicircle .x/ D into N arcs of equal length. 1 C 25x 2 3. Project the arcs onto the x-axis, giving the following formula for each Chebyshev point x ¶ µ en el intervalo Œ 1; 1. 41/57 j·π a+b b−a Usando puntos igualmente espaciados en las abcisas –fenómeno de Runge– y los puntos de Chebyshev, el resultado que se obtiene con polinomios de Newton es el que sigue. 2 1.2 1 1.5 0.8 1 0.6 0.4 0.5 0.2 0 0 −0.5 −1 −0.5 0 0.5 1 −0.2 −1 −0.5 0 0.5 1 El programa que se ha usado es este. % Chebyshev_ejemplo_1.m f = @(x) 1./(1+25*x.^2); n = 11; xe = linspace(-1,1,n); xc = cos((2*(1:n)-1)*pi/2/n); t = -1:.01:1; c = Newton_int_1(xe,f(xe)); t1 = polyval(c,t); subplot(121), plot(t,f(t),’b’,t,t1,’r’,xe,f(xe),’o’) c = Newton_int_1(xc,f(xc)); t1 = polyval(c,t); subplot(122), plot(t,f(t),’b’,t,t1,’r’,xc,f(xc),’o’) 42/57 Se puede probar que el polinomio de Chebyshev de grado n que mejor interpola, o aproxima, puntos de una función f .x/ usando puntos de Chebyshev es: ! n i nC1 nC1 X 1 X 2 p.x/ D f .xi / C Tk .xi /f .xi / Tk .x/: n C 1 i D1 n C 1 iD1 œ kD1 c0 ck Para calcular el valor de ese p.x/ en determinados puntos se puede usar el algoritmo de Clenshaw: n i ck Tk .x/ D u0 xu1; kD0 donde un D cn; un 1 D cn 1 C 2xun y uj D cj C 2xuj C1 uj C2; j D n 2; n 1; : : : ; 0: 43/57 Los dos programas que siguen calculan ese polinomio y lo evalúan para determinados puntos. function [c,x] = chebpol_int(fn,n) x = cos((2*(1:n)’-1)*pi/2/n); y = feval(fn,x); T = [zeros(n,1) ones(n,1)]; c = [sum(y)/n zeros(1,n-1)]; a = 1; for k = 2:n T = [T(:,2) a*x.*T(:,2)-T(:,1)]; c(k) = sum(T(:,2).* y)*2/n; a = 2; end function u = chebpol_clenshaw(c,x) n = length(c); u = c(n)*ones(size(x)); if n > 1 ujp1 = u; u = c(n-1)+2*x*c(n); for j = n-2:-1:1 ujp2 = ujp1; ujp1 = u; u = c(j)+2*x.*ujp1-ujp2; end u = u-x.*ujp1; end Si se utilizan con >> >> >> >> f = @(x) 1./(1+25*x.^2); [c,x] = chebpol_int(f,11); t = -1:.01:1; plot(t,f(t),’b’,t,chebpol_clenshaw(c,t),’r’,x,f(x),’ok’) 44/57 Da como resultado: 1.2 1 0.8 0.6 0.4 0.2 0 −0.2 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 que es la misma gráfica de antes. Aquí se pueden ver otras aproximaciones. 45/57 Interpolación polinómica por trozos Como hemos podido ver, algunas veces, al interpolar mediante un único polinomio un conjunto amplio de datos se suelen producir resultados poco satisfactorios en forma de oscilaciones. Una mejora consiste en interpolar cada intervalo entre datos mediante un único polinomio u otra función. La interpolación más simple es un segmento de línea recta entre cada dos datos o nudos. Aquí se pueden ver algunos casos. 46/57 Interpolación de Hermite Esta interpolación tiene en cuenta los valores de la función a aproximar por interpolación en puntos concretos y el de sus derivadas. Cada tramo es un polinomio de tercer grado con primera derivada continua en los extremos. El número de ecuaciones que se añade así al sistema lineal que subyace en el proceso es significativo. 47/57 Supongamos que se quiere aproximar f .x/ en el intervalo Œxi ; xd , mediante interpolación con un polinomio de tercer grado p.x/ D a C b.x xi / C c.x xi /2 C d.x xi /2.x xd /; y que f .xi / D yi , f .xd / D yd , p.xi / D yi , p.xd / D yd , p 0.xi / D si y p 0.xd / D sd . Necesitaremos calcular a, b, c y d . La derivada del polinomio es p 0.x/ D b C 2c.x xi / C d 2.x xi /.x xd / C .x Sustituyendo los valores conocidos se tiene que a D yi a C b.xd b D si b C 2c.xd xi / C c.xd xi / C d.xd xi / 2 xi /2 . D yd xi /2 D sd : 48/57 Escribiendo esto en forma matricial, 2 32 3 2 3 a 1 0 0 0 yi 6 76 7 6 7 1 0 0 60 7 6 b 7 6 si 7 6 76 7 D 6 7: 0 41 xi xd .xd xi /2 5 4 c 5 4yd 5 d 0 1 2.xd xi / .xd xi /2 sd Si se tienen n nudos o datos, hará falta determinar 4.n 1/ parámetros de los polinomios. El que se requiera que interpolen esos n datos añade 2.n 1/ ecuaciones, pues cada n 1 cúbica debe verificar los valores en sus extremos. El que tengan derivadas continuas añade otras n 2 ecuaciones para cada punto de unión. 49/57 El total de ecuaciones es 3n 4, lo que deja 4.n 1/ 3n C 4 D n parámetros libres. La interpolación por tanto no es única, por lo que se pueden fijar más condiciones para esos grados de libertad: monotonicidad, convexidad, etc. La función que realiza esta aproximación en Matlab es pchip. 50/57 Una sesión de trabajo con un ejemplo sencillo puede ser >> >> >> >> >> >> x = -3:3; y = [-1 -1 -1 0 1 1 1]; t = -3:.01:3; p = pchip(x,y,t); plot(x,y,’o’,t,p,’-’) legend(’datos’,’pchip’,3) 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −3 datos pchip −2 −1 0 1 2 3 51/57 Interpolación por splines cúbicas Una spline es una curva definida, normalmente, mediante polinomios de grado k, con continuidad hasta la derivada k 1. Una spline cúbica es un polinomio de tercer grado con continuidad hasta la segunda derivada. La idea de interpolar mediante splines es usar varias fórmulas, cada una correspondiente a un polinomio de grado bajo, para pasar a través de varios puntos. 52/57 Splines represent an alternative approach to data interpolation. In polynomial interpolation, a single formula, given by a polynomial, is used to meet all data points. The idea of splines is to use several formulas, each a low-degree polynomial, to pass through the data points. El ejemplo más simple es unof aspline en elin que puntos a The simplest example spline islineal, a linear spline, whichse oneconectan “connects thelos dots’’with segments. Assume that we are given a set of data points (x1 , y1 ), . . . , (xn , yn ) interpolarstraight-line mediante segmentos de recta. with x1 < · · · < xn . A linear spline consists of the n − 1 line segments that are drawn between neighboring pairs of points. Figure 3.12(a) shows a linear spline where, between each neighboring pair of points (xi , yi ), (xi+1 , yi+1 ), the linear function y = ai + bi x is En la figura muestra unpoints. ejemplo de data spline lineal el mismo spline drawnse through the two The given points in the yfigure are (1, 2),con (2, 1), (4, 4), cúbica. and (5, 3), and the linear spline is given by y y 4 4 3 3 2 2 1 1 1 2 3 (a) 4 5 x 1 2 3 4 5 x (b) Figure 3.12 Splines through four data points. (a) Linear spline through (1,2), (2,1), (4,4), and (5,3) consists of three linear polynomials given by (3.15). (b) Cubic spline through the same points, given by (3.16). 53/57 Como en el caso de Hermite, las splines cúbicos para interpolar n puntos de una función imponen 3n 4 condiciones, más n continuidad de la segunda derivada. 2 adicionales por requerirse la Los dos grados de libertad adicionales se fijan si, por ejemplo, Las primeras derivadas en los extremos izquierdo y derecho se fijan en sendos valores. Las segundas derivadas en los extremos son cero. Las primeras y segundas derivadas en los extremos son iguales dos a dos, etc. 54/57 Ejemplo Estudiemos la interpolación de tres puntos .x1; y1/, .x2; y2/ y .x3; y3/. Los polinomios de los dos tramos podrían ser p1.x/ D ˛1 C ˛2x C ˛3x 2 C ˛4x 3 p2.x/ D ˇ1 C ˇ2x C ˇ3x 2 C ˇ4x 3: Se necesitan 8 ecuaciones para determinar los parámetros. El que las cúbicas pasen por los puntos dados impone las siguientes condiciones ˛1 C ˛2x1 C ˛3x12 C ˛4x13 ˛1 C ˛2x2 C ˛3x22 C ˛4x23 ˇ1 C ˇ2x2 C ˇ3x22 C ˇ4x23 ˇ1 C ˇ2x3 C ˇ3x32 C ˇ4x33 D D D D y1 y2 y2 y3 : La continuidad de las primeras derivadas en x2 impone esta condición ˛2 C 2˛3x2 C 3˛4x22 D ˇ2 C 2ˇ3x2 C 3ˇ4x22: 55/57 La continuidad de las segundas derivadas en x2 impone esta otra 2˛3 C 6˛4x2 D 2ˇ3 C 6ˇ4x2: Por definición, se impone que las segundas derivadas en los extremos sean cero, lo que hace que 2˛3 C 6˛4x1 D 0 y 2ˇ3 C 6ˇ4x3 D 0: Todo en forma matricial queda 2 1 x1 x12 x13 61 x2 x22 x23 60 0 0 0 6 60 0 0 0 6 60 1 2x2 3x22 6 60 0 2 6x2 40 0 2 6x1 0 0 0 0 0 0 0 0 1 x2 1 x3 0 1 0 0 0 0 0 0 0 0 x22 x32 2x2 2 0 2 32 3 2 3 0 y1 ˛1 6y27 0 7 6 ˛2 7 6y 7 37 6 7 x2 7 6˛3 7 6 37 37 6 7 6y47 x3 7 6˛4 7 6 7 27 6 7 D 6 7 : 3x2 7 6ˇ17 6 0 7 6x2 7 6ˇ2 7 607 5 4 5 405 0 ˇ3 0 6x3 ˇ4 Resolviendo este sistema se obtiene la solución deseada. 56/57 La función que realiza esta aproximación en Matlab es spline. Una sesión de trabajo puede ser, comparando con Hermite, x = -3:3; y = [-1 -1 -1 0 1 1 1]; t = -3:.01:3; p = pchip(x,y,t); s = spline(x,y,t); plot(x,y,’o’,t,p,’-’,t,s,’-.’) legend(’datos’,’pchip’,’spline’,4) 1.5 1 0.5 0 −0.5 −1 −1.5 −3 datos pchip spline −2 −1 0 1 2 3 57/57