MÉTODOS MATEMÁTICOS (Curso 2011-2012) Tercer Curso de Ingeniería Aeronáutica Departamento de Matemática Aplicada II. Universidad de Sevilla LECCIÓN 6: INTERPOLACIÓN POLINÓMICA Índice 1. Interpolación polinómica 1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. El polinomio interpolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2. Interpolación polinómica a trozos 2.1. Interpolación lineal a trozos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Cúbicas de Hermite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Interpolación por splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 10 13 3. Cuestiones y problemas 16 Resumen En las asignaturas de Cálculo se suelen introducir algunos rudimentos de interpolación polinómica. En esta leccion desarrollaremos las nociones suficientes de este tema para entender el manejo de los métodos de inerpolacón presentes en entornos como Matlab, así como aquellos conceptos que sean necesarios para en lecciones posteriores desarrollar los métodos de cuadratura numérica. 1. 1.1. Interpolación polinómica Introducción Son muchas y muy distintas las situaciones en las cuales aparecen series de datos o resultados de mediciones experimentales de los que sólo se conoce una cierta cantidad finita de ítems y para los cuales se necesita encontrar una “ley general” que sirva para su tratamiento. Usualmente esa ley general no es otra cosa que una función que tome los valores predeterminados. Precisamente, este es el cometido básico de la interpolación: dada una tabla de datos (que podemos suponer procedente de una cierta función desconocida o conocida pero de cálculo problemático), se trata de encontrar otra función tal que que su comportamiento en los puntos dados se ajuste, en algún sentido, a los valores proporcionados por la tabla. La función interpoladora servirá para sustituir a la función de partida, tanto para evaluarla en distintos puntos, como para estimar todo tipo de propiedades analíticas. La elección del tipo de funciones interpoladoras depende básicamente del contexto en que se esté trabajando y, como es previsible, hay una gran variedad. En este curso, sólo trataremos la interpolación polinómica de Lagrange, y ciertos tipos de interpolación polinómica a trozos (lineal, 1 cúbicas de Hermite y splines). Es posible interpolar una función con otro tipo de funciones como por ejemplo, funciones racionales. La interpolación polinómica tiene gran importancia teórica en análisis numérico pues permite fundamentar una amplia gama de métodos para la diferenciación numérica, la aproximación numérica de integrales o cuadratura, la integración numérica de ecuaciones diferenciales, cálculo de estremos de una función, etc. Desde un punto de vista gráfico, la interpolación polinómica tiene una gran desventaja: cuando se tienen muchos datos a interpolar, el correspondiente polinomio interpolador tiene necesariamente un grado alto y presenta numerosas oscilaciones. Para mitigar estos efectos, la estratagia usual es dividir el intervalo en varios trozos y en cada trozo interpolar los datos por un polinomio de grado bajo; es decir, realizar interpolación a trozos. La interpolación trigonométrica se usa extensamente en el análisis de Fourier numérico y, en general, en multitud de fenómenos cíclicos. Su campo de aplicación abarca la mecánica aplicada, la acústica, la ingeniería biomédica, el análisis sismográfico, el procesado digital de señales, el rádar o el electromagnetismo aplicado, por citar algunas áreas. 1.2. El polinomio interpolador Los polinomios son funciones con muchas ventajas a la hora de su manejo práctico. Por ejemplo, son derivables con continuidad tantas veces como se desee. De un polinomio de grado N p(x) = a0 + a1 x + · · · + aN xN , basta disponer de sus N + 1 coeficientes para poder calcular su valor en cualquier punto x. Es más observando que sacando factor común a x, x2 , etc, podemos escribir p(x) = a0 + x(a1 + x(a2 + x(. . . x(aN −1 + aN x) . . .)), se obtiene de modo natural el algoritmo de Horner para su evaluación 1. p ← aN , 2. para j = N − 1, . . . , 0 p ← aj + xp, que permite evaluar el polinomio con N multiplicaciones y N sumas. El problema general de la interpolación polinómica consiste en dada una función f : [a, b] → R y N + 1 puntos diferentes {x0 < x1 < · · · < xN } ⊂ [a, b], denominados nodos de la interpolación, encontrar un polinomio pN tal que pN (xj ) = f (xj ), para todo j = 0, . . . , N . Si consideramos los N + 1 polinomios N Y x − xl Lj (x) = , xj − xl l=0 l6=j 2 j = 0, . . . , N, es decir, polinomios tales que Lj (xl ) = 1, 0, l = j, l 6= j, se observa que una solución del problema de interpolación es simplemente (1) pN (x) = f (x0 )L0 (x) + · · · + f (xN )L(xN ). Los polinomios Lj se denominan polinomios de Lagrange (asociados a los nodos x0 , . . . , xN ), y la expresión (1) forma de Lagrange del polinomio interpolador (de f en los nodos x0 , . . . , xN ). Ejemplo 1 los cuatro polinomios de Lagrange de grado 3 asociados a los nodos x0 = 0, x1 = 1/2, x2 = 2 y x3 = 3 son (x − 21 )(x − 2)(x − 3) (x − 21 )(x − 2)(x − 3) , = −3 (0 − 12 )(0 − 2)(0 − 3) x(x − 2)(x − 3) x(x − 2)(x − 3) L1 (x) = 1 , =8 1 1 15 ( 2 − 0)( 2 − 2)( 2 − 3) L0 (x) = L2 (x) = x(x − 12 )(x − 3) x(x − 21 )(x − 3) , = −3 (2 − 0)(2 − 21 )(2 − 3) L3 (x) = x(x − 12 )(x − 2) x(x − 21 )(x − 2) = 2 , 15 (3 − 0)(3 − 21 )(3 − 2) y tienen las gráficas siguientes. 2 2 1 1 0 0 −1 −1 −2 0 2 −2 4 2 2 1 1 0 0 −1 −1 −2 0 2 −2 4 0 2 4 0 2 4 donde con círculos indicamos los nodos de interpolación y con un asterisco el punto de la gráfica donde el polinomio de Lagrange toma el valor uno sobre el nodo de interpolación correspondiente. Si tomamos como función f a interpolar f (x) = cos(x) la correspondiente combinación lineal de los polinomios de Lagrange para formar el polinomio interpolador es p3 (x) = cos(0)L0 (x) + cos(1/2)L1 (x) + cos(2)L2 (x) + cos(3)L3 (x). 3 En el siguiente gráfico mostramos la función f (x) = cos(x) (en trazo continuo) y su polinomio interpolador p3 (en trazo discontinuo). 1.5 1 0.5 0 −0.5 −1 −1.5 −1 0 1 2 3 4 Observe que en el intervalo definido por los nodos de interpolación el ojo humano difícilmente distingue la función de su polinomio interpolador. Fuera de dicho intervalo, la diferencia entre ambas gráficas es más clara. Si exigimos que el grado de p sea menor o igual que N, se tiene que pN es único. Pues, si hubiera dos polinomios p1 y p2 interpoladores de f en los nodos x0 , . . . , xN , el polinomio q = p1 −p2 de grado menor o igual que N se anula en los N + 1 puntos de interpolación (que recuérdese que estamos suponiendo distintos). Es decir, q tiene N + 1 raíces distintas, luego es el polinomio nulo. Estos comentarios se recogen en el siguiente teorema. Teorema 1 Sea f : [a, b] → R y N + 1 puntos diferentes {x0 < x1 < . . . < xN } ⊂ [a, b]. Entonces, existe un único polinomio p de grado menor o igual que N verificando p(xj ) = f (xj ), para todo j = 0, 1, ..., N. Dicho polinomio es el dado en (1) Es importante saber qué error se comete al reemplazar una función f por su interpolante. Para deducir cuál es el error (absoluto) f (x) − pN (x) en un punto x 6= xj , j = 0, . . . , xN , basta observar que la función y 7→ g(y) = f (y) − pN (y) − (f (x) − pN (x)) (y − x0 ) . . . (y − xN ) , (x − x0 ) . . . (x − xN ) se anula en N + 2 puntos distintos (en los N + 1 puntos de interpolación y el punto x). Por tanto, por el teorema de Rolle, g ′ se anulará en N + 1 puntos intermedios a los anteriores, g ′′ en N puntos intermedios a estos últimos, y, siguiendo con este razonamiento, concluimos g (N +1) (ξ) = 0 para algún punto ξ ∈ (mı́n(x0 , x), máx(xN , x)). Pero como la derivada de orden N + 1 del polinomio de grado N, pN (y) es nula y la del polinomio de grado N + 1, (y − x0 ) . . . (y − xN ), es (N + 1)! concluimos que 0 = g (N +1) (ξ) = f (N +1) (ξ) − 4 (f (x) − pN (x))(N + 1)! , (x − x0 ) . . . (x − xN ) de donde podemos despejar el valor del error f (x) − p(x), en la fórmula que se recoje en el siguiente resultado. Teorema 2 Sea f : [a, b] → R de clase C N +1 [a, b] y N + 1 puntos diferentes {x0 < x1 < · · · < xN } ⊂ [a, b]. Si p es el correspondiente polinomio interpolador, se tiene que para cada x ∈ [a, b], existe un punto ξ = ξ(x) ∈ (mı́n(x0 , x), máx(xN , x)) tal que f (x) − pN (x) = f (N +1) (ξ) (x − x0 ) . . . (x − xN ). (N + 1)! Respecto a la fórmula anterior conviene hacer dos precisiones. En primer lugar, en el exterior del intervalo [a, b], la función x 7→ |(x − x0 ) . . . (x − xN )| crece muy rápidamente fuera de [a, b], y más cuanto más alejado esté x de dicho intervalo. Por tanto, en el uso de la interpolación de Lagrange para “aproximar” f fuera de este intervalo (proceso denominado extrapolación) debe evitarse, salvo para valores de x cercanos a [a, b]. Conviene que recuerde lo visto en el Ejemplo 1. En segundo lugar, puede verse que la fórmula del error depende obviamente de f pero también de la elección de los nodos. Es posible buscar la mejor disposición de éstos para que el error sea pequeño, cuestión en la que no abundaremos en este curso pues raramente se presenta en la práctica la ocasión de elegir los nodos de interpolación. La forma en que hemos escrito el polinomio interpolador no siempre es la más útil desde el punto de vista práctico, pues no permite evaluarlo en un punto con N + 1 flops. Por ello es obligado conocer la forma de Newton del polinomio interpolador, que se define de manera recurrente como como p0 (x) = f (x0 ), pj (x) = pj−1 (x) + f [x0 , . . . , xj ](x − x0 ), . . . (x − xj−1 ), j = 1, . . . , N, donde cada pj es el polinomio interpolador de f basado en los nodos x0 , . . . , xj , y f [x0 , . . . , xj ] es el coeficiente director de pj . De esta manera, tenemos que pN (x) = f (x0 ) + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 ) + + f [x0 , x1 , x2 , x3 ](x − x0 )(x − x1 )(x − x2 ) + · · · + f [x0 , . . . , xN ](x − x0 ), . . . (x − xN −1 ).(2) Así por ejemplo, el polinomio de grado 3 que interpola a f (x) = 1 + x4 en los nodos 0, 1, 2, 4 se escribe como p4 (x) = 1 + x + 7x(x − 1) + 7x(x − 1)(x − 2). En la forma de Newton (2) del polinomio interpolador, los diversos coficientes f [x0 ] = f (x0 ), f [x0 , x1 ], . . . , f [x0 , . . . , xN ], que, como hemos señalado, son los correpondientes coeficientes directores de los diversos polinomios interpoladores de f basados en los conjuntos de nodos {x0 }, {x0 , x1 }, . . . ,{x0 , . . . , xN }, reciben el nombre de diferencias divididas de f basadas en los nodos x0 , x1 , . . . , xN . Para calcular su valor, basta observar que el orden en que consideremos los nodos no afecta al polinomio pN y que por tanto también se tiene pN (x) = f (x1 ) + f [x1 , x2 ](x − x1 ) + · · · + f [x1 , . . . , xN ](x − x1 ) . . . (x − xN −1 ) + f [x1 , . . . , xN , x0 ](x − x1 ), . . . (x − xN ). 5 (3) Ahora bien, puesto que el polinomio interpolador es único, tenemos por un lado que los coeficientes directores en (2) y (3) deben ser iguales, esto es, f [x0 , x1 , . . . , xN ] = f [x1 , . . . , xN , x0 ], Por otro lado, igualando los coeficientes de grado N − 1 en (2) y (3) tenemos que f [x0 , . . . , xN −1 ] − f [x0 , . . . , xN ](x0 + · · · + xN −1 ) = f [x1 , . . . , xN ] − f [x0 , . . . , xN ](x1 + · · · + xN ) de donde podemos despejar el valor f [x0 , . . . , xN ] como f [x0 , . . . , xN ] = f [x1 , . . . , xN ] − f [x0 , . . . , xN −1 ] , xN − x0 expresión que permite el cálculo recurrente de las diferencias divididas. Así por ejemplo, incializando f [xj ] = f (xj ), j = 0, 1, 2, 3, el cálculo de la tabla f [x0 ] f [x1 ] f [x0 , x1 ] f [x2 ] f [x1 , x2 ] f [x0 , x1 , x2 ] f [x3 ] f [x2 , x3 ] f [x1 , x2 , x3 ] f [x0 , x1 , x2 , x3 ] se lleva a cabo calculando la primera columna, luego la segunda, y continuando el proceso hasta calcular la última diferencia dividida f (x0 ) f (x1 ) f [x0 , x1 ] = f (x1 )−f (x0 ) x1 −x0 f (x2 ) f [x1 , x2 ] = f (x2 )−f (x1 ) x2 −x1 f [x0 , x1 , x2 ] = f [x1 ,x2 ]−f [x0 ,x1 ] x2 −x0 f (x3 ) f [x2 , x3 ] = f (x3 )−f (x2 ) x3 −x2 f [x1 , x2 , x3 ] = f [x2 ,x3 ]−f [x1 ,x2 ] x3 −x1 f [x0 , x1 , x2 , x3 ] = f [x1 ,x2 ,x3 ]−f [x0 ,x1 ,x2 ] x3 −x0 Dos observaciones son pertinentes. La primera es que los coeficientes del polinomio interpolador escrito en forma de vienen dados por la diagonal de la tabla, pues por ejemplo p4 (x) = f (x0 )+f [x0 , x1 ](x−x0 )+f [x0 , x1 , x2 ](x−x0 )(x−x1 )+f [x0 , x1 , x2 , x3 ](x−x0 )(x−x1 )(x−x2 ). La segunda es que el número de operaciones de calcular todos los coeficientes es N(N + 1)/2 divisiones y N(N + 1) restas. Observe además que, aunque parezca que para llevar a cabo este proceso en un ordenador se requiere una matriz de tamaño (N + 1) × (N + 1), en realidad se puede hacer con un vector de longitud N + 1, pues observe que, en la siguiente recurrencia, siempre podemos pasar de un vector al siguiente, f [x0 ] f [x0 ] f [x0 ] f [x0 ] f [x1 ] → f [x0 , x1 ] → f [x0 , x1 ] → f [x0 , x1 ] (4) f [x0 , x1 , x2 ] f [x0 , x1 , x2 ] f [x1 , x2 ] f [x2 ] f [x0 , x1 , x2 , x3 ] f [x1 , x2 , x3 ] f [x2 , x3 ] f [x3 ] conteniendo este vector los coeficientes de la forma de Newton del polinomio interpolador. 6 Ejemplo 2 Determinar la forma de Newton del polinomio interpolador asociado a la tabla xj f (xj ) -1 1 2 3 1 3 2 -1 y calculemos su valor en x = 0. La tabla de diferencias divididas es xj f (xj ) −1 1 3−1 1−(−1) 1 −1−1 2−(−1) 3 2−3 2−1 2 3 =1 −1 −1−(−2/3) 3−(−1) = −1 2 −1−2 3−2 = − 23 = −3 −3−(−1) 3−1 1 = − 12 = −1 El polinomio interpolador pedido es pues 2 1 p(x) = 1 + (x + 1) − (x + 1)(x − 1) − (x + 1)(x − 1)(x − 2), 3 12 y evaluándolo en x = 0 obtenemos 1 2 1 12 + 4 − 1 15 5 2 = = . p(0) = 1 + (1) − (1)(−1) − (1)(−1)(−2) = 2 + − = 3 12 3 6 6 6 2 Nota 1 En muchos exámenes aparece una cuestón como la del ejemplo anterior. La experiencia muestra que la mayor parte de los errores en la resolución de esta cuestión son de tipo aritmético al calcular la tabla de diferencia dividadas. Estos errores se pueden detectar fácilmente comprobando si el polinomio calculado interpola los datos dados. Si hacemos esta comprobación, por inspección vemos que efectivamente es cierto que p(−1) = 1 y que p(1) = 3. Para x = 2 y x = 3 operamos, 2 p(2) = 1 + 3 − (3)(1) = 4 − 2 = 2, 3 2 1 16 2 18 p(3) = 1 + 4 − (4)(2) − (4)(2)(1) = 5 − − =5− = 5 − 6 = −1. 3 12 3 3 3 Como puede verse, son cuentas sencillas, que no cuesta nada hacer, y que nos aseguran que efectivamente hemos calculado el polinomio interpolador. Otro error típico, aunque menos frecuente se produce al evaluar el polinomio interpolador. Podemos detectar fácilmente este error reescribiendo el polinomio y volviéndolo a evaluar. Para ello basta recordar que para el cálculo del polinomio interpolador, el orden de los nodos es irrelevante, y que, por tanto, dicho polinomio es también p(x) = f [x3 ]+f [x2 , x3 ](x−x3 )+f [x1 , x2 , x3 ](x−x3 )(x−x2 )+f [x0 , x1 , x2 , x3 ](x−x3 )(x−x2 )(x−x1 ), 7 esto es, p(x) = −1 − 3(x − 3) − (x − 3)(x − 2) − 1 (x − 3)(x − 2)(x − 1), 12 que al evaluarlo en x = 0 da p(0) = −1 − 3(−3) − (−3)(−2) − 1 1 1 4+1 5 (−3)(−2)(−1) = −1 + 9 − 6 + = 2 + = = , 12 2 2 2 2 valor que al coincidir con el anteriormente calculado nos sugiere que efectivamente hemos hecho los cálculos correctamente. Terminamos esta sección comentando que el polinomio interpolador puede no ser en algunos casos la mejor forma de representar una función en todo un intervalo, incluso aunque la fórmula del error nos lleve a pensar que así sea, o aunque haya casos como el visto en el Ejemplo 1 en los que el polinomio interpolador sea una excelente representación de la función. Ejemplo 3 (El ejemplo de Runge). Para la función f (x) = 1 , 1 + x2 en el intervalo [−5, 5], el polinomio interpolador pN (x) basado en nodos xj = −5 + jh, j = 0, . . . N, h= 10 , N no converge a f cuando N → ∞ en el sentido que cuando N → ∞. máx |f (x) − pN (x)| → ∞, x∈[−5,5] Las siguientes figuras muestran en trazo continuo la gráfica de la función f , y en trazo discontinuo la gráfica de los polinomios interpoladores p10 y p14 , y con círculos los puntos en que ambas funciones coinciden. La amplitud de las oscilaciones aumenta a medida que se toma N mayor. grado N=10 grado N=14 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0 −1 −5 0 −1 −5 5 Casos como éste son los que motivan la sección siguiente. 8 0 5 2. Interpolación polinómica a trozos Este es el procedimiento de interpolación que se utiliza en Matlab con el comando interp1. Si una función f definida en un intervalo [a, b], para poder construir su interpolante a trozos se debe seleccionar una partición ∆ = {a = x0 < x1 < . . . < xN = b}, de [a, b]. El interpolante a trozos p∆ (subordinado a la partición ∆) satisface 1. p∆ (xj ) = f (xj ), para j = 0, . . . , N, 2. en cada intervalo [xj−1 , xj ], j = 1, . . . , N, el interpolante p∆ es un polinomio de grado menor o igual que uno prefijado de antemano. Nótese que en el interior de cada intervalo [xj−1 , xj ], el interpolante a trozos p∆ es un polinomio, y por tanto continuo y derivable con continuidad tantas veces como se quiera, y al coincidir con f en los extremos del intervalo resulta ser entonces una función continua, pues los límites laterales de p∆ en cada nodo xj coinciden con f (xj ). 2.1. Interpolación lineal a trozos Por ejemplo, si fijamos el grado en 1, puesto que en cada intervalo [xj−1 , xj ] debe ser un polinomio de grado 1 que debe coincidir con f en los extremos del mismo, p∆ por fuerza debe ser en ese intervalo el polinomio interpolador p1 basado en los nodos xj−1 y xj , esto es, p∆ (x) = xj − x x − xj−1 f (xj−1 ) + f (xj ), xj − xj−1 xj − xj−1 x ∈ [xj−1 , xj ], j = 1, . . . , N Este interpolante se conoce con el nombre de interpolante lineal a trozos. Su gráfica es una poligonal que coincide con f en los puntos de interpolacion. Observe por ejemplo el interpolante lineal a trozos de f (x) = cos(x) en el intervalo [0, 3] basado en la partición ∆ = {0, 1/2, 2, 3} 1.5 1 0.5 0 −0.5 −1 −1.5 −1 0 1 2 9 3 4 (compare con el Ejemplo 1) o los interpolantes lineales de f (x) = 1/(1 + x2 ) basados en los mismos 11 y 14 nodos con los que construimos el polinomio interpolador del Ejemplo 3. N=10 N=14 1.5 1.5 1 1 0.5 0.5 0 −5 0 0 −5 5 0 5 Es interesante estudiar el error del interpolante lineal a trozos. Puesto que en cada intervalo [xj−1 , xj ] el interpolante lineal a trozos es un polinomio interpolador, tedremos que el error de interpolación es (x − xj−1 )(x − xj ) . f (x) − p∆ (x) = f ′′ (ξ) 2 Denotando hj = xj − xj−1 , j = 1, . . . , N, y h = máx hj , j (en lo que sigue esta sección mantendremos esta notación) y dado que máx x∈[xj−1 ,xj ] |(x − xj−1 )(x − xj )| ≤ h2j , 4 tendremos entonces que máx x∈[xj−1 ,xj ] |f (x) − p∆ (x)| ≤ y por tanto, máx |f (x) − p∆ (x)| ≤ x∈[a,b] h2j 8 máx ξ∈[xj−1 ,xj ] |f ′′ (ξ)| , h2 máx |f ′′ (ξ)| . 8 ξ∈[a,b] (5) Observe cómo esta última cota nos indica que basta con que f sea regular para que su interpolante lineal converja cuadráticamente a f cuando el diámetro h de la partición ∆ tiende a 0. Observe entonces que en el caso del Ejemplo de Runge, mientras el polinomio interpolador no converge cuado N → ∞, el interpolante lineal a trozos converge cuando se toma como ∆ una partición uniforme de N intervalos iguales (y por tanto h = 10/N) y N → ∞. 2.2. Cúbicas de Hermite El interpolante lineal a trozos tiene el inconveniente de que, siendo una función continua, no es derivable con continuadad (su derivada es una función constante a trozos con saltos en los nodos). 10 Para obtener resultados que mejor reproduzcan una función regular se recurre a las cúbicas de Hermite. Para definirlas, consideremos las funciones 3 φ(t) = 3t2 − 2t3 = −2t2 (t − ) 2 ψ(t) = t3 − t2 = t2 (t − 1). Por ser t = 0 un cero doble de ambas cúbicas, se tiene que φ(0) = φ′ (0) = 0, ψ(0) = ψ ′ (0) = 0, sin embargo, φ(1) = 1, φ′ (1) = 0, ψ(1) = 0, ψ ′ (1) = 1. Con estas funciones construimos las cúbicas de Hermite, que en el intervalo [0,1] son φ0 (t) = φ(1 − t), φ1 (t) = φ(t), ψ0 (t) = −ψ(1 − t), ψ1 (t) = ψ(t), cuyas gráficas son las siguientes φ φ 0 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 0 0.5 ψ 1 1 1 0 0 ψ 0 0.5 0.5 0 0 −0.5 0 1 1 0.5 0.5 1 −0.5 0 0.5 1 y que se caracterizan por ser los únicos polinomios de grado menor o igual que tres tales que φi (j) = δij , φ′i (j) = 0, ψi (j) = 0, ψi′ (j) = δij , i, j = 0, 1. Por esta razón la función p(t) = aφ0 (t) + bφ1 (t) + αψ0 (t) + βψ1 (t) es un polinomio de grado menor o igual que 3 que toma los valores a y b en t = 0, 1, respectivamente y cuya derivada toma los valores α y β en 0, 1. Esto permite definir el interpolante cúbico a trozos p∆ de una función f como x − xj−1 x − xj−1 ) + f (xj )φ1 ( ) hj hj x − xj−1 x − xj−1 + αj−1 hj ψ0 ( ) + αj hj ψ1 ( ), hj hj p∆ (x) = f (xj−1)φ0 ( x ∈ [xj−1 , xj ], que coincide con f en los nodos xj y cuya derivada toma valores p′∆ (xj ) = αj , j = 0, . . . , N. Nótese que por ser p∆ un interpolante a trozos es una función continua en todo [a, b], pero como en el interior de cada intervalo [xj−1 , xj ], el interpolante a trozos p∆ es un polinomio, es derivable 11 con continuidad tantas veces como se quiera. Al tomar p′∆ el valor αj en cada nodo xj , los límites laterales de p′∆ en xj coinciden con αj , y por tanto p∆ es una función de clase C 1 en [a, b]. Existen diversos procedimientos para elegir los αj . En Matlab el comando interp1, cuando el argumento correspondiente al método es ’cubic’, elige los αj de manera que se satisfaga p′∆ (x)(p∆ (xj ) − p∆ (xj−1 )) > 0, ∀x ∈ (xj−1 , xj ), con objeto de preservar el carácter monótono del interpolante en aquellos subintervalos donde se suponga que f lo es. Nota 2 El interpolante a trozos basado en las cúbicas de Hermite aquí descrito no debe confundirse con lo que en buena parte de los libros de texto y tratados de métodos numéricos se llama interpolante cubico de Hermite a trozos. En éste, los αj se toman como αj = f ′ (xj ) para todo j, con lo que el interpolante a trozos coincide con f y su derivada en los nodos xj . Por esta última propiedad, su cota de error es máx |f (x) − p∆ (x)| = x∈[a,b] h4 máx |f ′′′′ (x)| = O(h4 ). 384 x∈[a,b] El interpolante que usa Matlab y que hemos descrito, puesto que sus valores αj no coinciden en general con los f ′ (xj ), tiene en general una cota de error que decrece como O(h2 ). Esto podemos comprobarlo en el siguiente gráfico donde para la función f (x) = cos(4(x − 0,3)) calculamos el error máximo del interpolante lineal (en línea de trazo continua), que como vimos en (5) se comporta como O(h2 ) y del interpolante basado en las cúbicas de Hermite que utiliza Matlab (en línea de trazo discontinuo), sobre particiones uniformes del intervalo [−1, 1] (xj = −1 + jh, j = 0, . . . , N, N = 1/h) para valores de h = 1/10, 1/20, . . . , 1/640. f(x)=cos(4(x−0.3)) −2 10 −3 10 linear −4 error 10 −5 10 shape preserving cubic −6 10 slopes: 2.00, 2.001 −7 10 −3 10 −2 10 −1 10 h=1/N Las pendientes de las rectas ajustadas por mínimos cuadrados a los pares (h, error) se muestran el gráfico, corroborando lo que se aprecia que es que el error de ambos interpolantes a trozos se comporta como O(h2 ), aunque el del basado en las cúbicas de Hermite es significativamente menor que el del lineal a trozos. 12 2.3. Interpolación por splines Un spline cúbico es un interpolante a trozos S∆ de clase C 2 en [a, b] y que en cada subintervalo [xj−1 , xj ] es un polinomio de grado menor o igual que tres. Para construirlo, basta tomar el interpolante a trozos cúbico p∆ (x) que, per sencillez, denotaremos p(x), x − xj−1 x − xj−1 ) + f (xj )φ1 ( ) hj hj x − xj−1 x − xj−1 + αj−1 hj ψ0 ( ) + αj hj ψ1 ( ), hj hj p(x) = f (xj−1 )φ0 ( x ∈ [xj−1 , xj ], que, como hemos visto es de clase C 1 en [a, b], y determinar los αj para que, en cada nodo interior xj , j = 1, . . . , N − 1 los límites laterales de la segunda derivada p′′ (xj + ) = x→x lı́m p′′ (x), p′′ (xj − ) = x→x lı́m p′′ (x), j x>xj j x<xj coincidan. Un sencillo cálculo muestra que estos valores son, 1 f (xj−1) − f (xj ) 6 + 2αj−1 + 4αj , p (xj − ) = hj hj 1 f (xj+1) − f (xj ) ′′ p (xj + ) = 6 − 2αj+1 − 4αj . hj+1 hj+1 ′′ Imponiendo que p′′ (xj − ) = p′′ (xj + ) en cada nodo interior xj , obtenemos que se debe satisfacer el siguiente sistema de N − 1 ecuaciones con N + 1 incógitas, 1 1 1 1 f (xj+1 ) 1 1 f (xj−1 ) αj + + − 2 f (xj ) + , (6) αj−1 + 2 + αj+1 = 3 − hj hj hj+1 hj+1 h2j h2j hj+1 h2j+1 j = 1, . . . , N − 1. Existen diversos procedimientos para completar este sistema con otras dos eucuaciones más de modo que los αj queden univocamente determinados. El procedimiento que se utiliza en Matlab en el comando interp1 con su cuarto argumento ’spline’, es imponer en los dos nodos interiores extremos, x1 y xN −1 , lo que se conoce como condición "not-a-knot". Consiste en pedir que en dichos nodos, el interpolante no sólo sea C 1 sino C 3 , esto es, p′′′ (x1− ) = p′′′ (x1+ ), p′′′ (xN −1 − ) = p′′′ (xN −1 + ). Un sencillo cálculo muestra que estas dos condiciones dan lugar a las siguientes ecuaciones. 1 1 1 1 f (x1 ) − f (x0 ) f (x1 ) − f (x2 ) α − − 2 α1 − 2 α2 = 2 +2 , (7) 2 0 2 3 h1 h1 h2 h2 h1 h32 1 1 f (xN −1 ) − f (xN −2 ) f (xN −1 ) − f (xN ) 1 1 αN −2 − − 2 αN −1 − 2 αN = 2 +2 . (8) 2 2 3 hN −1 hN −1 hN hN hN −1 h3N 13 Respecto a la resolubilidad del sistema de ecuaciones, basta observar que sobre una red uniforme (hj = h, para todo j) de (7-8) podemos despejar α0 = α2 − 2(f (x2 ) − 2f (x1 ) + f (x0 )), αN = αN −2 + 2(f (xN ) − 2f (xN −1 ) + f (xN −2 )). y eliminar α0 y αN de las de las N − 1 ecuaciones restantes (6). La matriz de coeficientes del sistema resultante (tras multiplicar cada ecuación por h) es la matriz tridiagonal 4 2 1 4 1 . . . . . . . . . . 1 4 1 2 4 Esta matriz, según el teorema de los círculos de Gerschgorin que vimos en la lección anterior tiene todos sus autovalores con parte real mayor estrictamente que 2, luego es invertible. El mismo razonamiento permite probar que el sistema (6–8) tendrá una única solución siempre que las cocientes h2 /h1 y hN /hN −1 no disten excesivamente de 1. La condición "not-a-knot"descrita también es la que se utiliza en el comando spline de Matlab. Este comando devuelve los mismos resultados que el comando interp1 con la opción ’spline’. Sin embargo el comando spline, si el número de componentes del vector y de valores f (xj ) que se le proporcionana supera en dos unidades al número de nodos xj , el comando spline toma la primera componente del vector y como valor de f ′ (x0 ) (esto es como valor α0 ) y la última componente de y como f ′ (xN ) (esto es, como valor αN ). Esta es otra posibilidad de de construir un spline: proporcionando los valores de f en los nodos de la partición ∆ y los valores de f ′ en los extremos del intervalo [a, b]. El spline así obtenido recibe el nombre de sujeto. Ejemplo 4 Típicamente en la industria se desea representar un perfil (la superficie de una herramienta, el casco de un buque, etc) midiendo con exactitud los menos puntos posibles de dicho perfil, e interpolando el resto. Los splines cúbicos, por ser funciones con dos derivadas continuas, producen curvas de interpolación más suaves. En ocasiones, sin embargo, pueden presentar oscilaciones de las que carece la función que se quiere representar. El interpolante cúbico basado en las cúbicas de Hermite, aunque da lugar a curvas menos suaves, no suele padecer este defecto. Un caso donde se aprecia este comportamiento es el afamado ejemplo de Akima, en el que la tabla de valores a interpolar es la siguiente. xj f (xj ) 0 2 3 5 6 8 10 10 10 10 10 10 9 11 12 14 15 10.5 15 50 60 85 Observe que los valores a interplar f (xj ) forman una serie creciente, con lo que sería deseable que este comportamiento lo tuviese también el interpolante. Los resultados obtenidos con el comando iterp1 de Matlab se muestran en las dos figuras siguientes. Los puntos de interpolación (xj , f (xj )) aparecen indicados con circulitos. Como puede apreciarse, el interpolante cúbico basado en las cúbicas de Hermite produce una función mónotona, 14 como la tabla de datos, mientras el spline cúbico presenta oscilaciones. shape preserving cubic cubic spline 90 90 80 80 70 70 60 60 50 50 40 40 30 30 20 20 10 10 0 0 5 10 0 0 15 5 10 15 Ejemplo 5 Los splines no tienen por qué producir curvas indeseadas. Por ejemplo, el contorno de la siguiente llave fija contiene cinco segmentos retos, tres en el mango y dos en la muesca para abrazar la tuerca que se desee atornillar, y tres trozos curvos. Para la representacion gráfica que hemos mostrado, los tres trozos curvos se reprodujeron con splines, tal y como indicamos en la siguiente figura, donde, como hemos venido haciendo, los puntos de interpolación aparecen marcados con círculos. 7.5 7 6.5 6 5.5 5 4.5 4 3.5 3 2.5 0 1 2 3 4 5 6 Las curvas superior e inferior se obtuvieron con splines donde se interpolaron los valores de la coordenada vertical como función de la coordenada horizontal, y la curva restante se interpoló 15 los valores de la coordenada horizontal en función de la vertical. Así por ejemplo, la tabla de interpolación para la curva inferior fue la siguiente. xj yj 0.10 0.20 0.55 1.10 1.65 2.45 3.10 3.80 4.60 5.10 5.82 4.00 3.80 3.30 2.90 2.65 2.50 2.50 2.80 3.30 3.45 3.32 Terminamos la lección mencionando las cotas de error que satisfacen los splines. En [3], puede encontrar la prueba de la cota máx |f (x) − S∆ (x)| ≤ C máx f ′′′′ (x)h4 , x∈[x0 ,xN ] x∈[x0 ,xN ] donde C es una constante independiente de h, para el spline sujeto. También se puede probar una cota similar para el Spline obtenido mediante la condición "not-a-knot". Información abundante sobre los splines puede encontrar en [1]. Algunas de las cuestiones de esta lección se han tomado de la obra citada de Sanz-Serna [2]. Encontrá útil este libro no sólo para ampliar sus conocimientos sobre interpolación sino sobre otros de los temas vistos en curso. Referencias [1] C. de Boor, A practical guide to splines, Springer, New York, 2001. [2] J. M. Sanz-Serna, Diez Lecciones de Cálculo Numérico, Universidad de Valladolid, 1998. [3] J. Stoer and R Bullirsch, Introduction to Numerical Analysis, Springer Verlag, New York 1993. 3. Cuestiones y problemas CUESTIONES Ejercicio 1 Dterminar el polinomio interpolador asociado a la tabla xj 2 3 f (xj ) 1 2 -1 3 Ejercicio 2 Determinar el polinomio interpolador de f (x) = x4 − 2x3 − x2 + 4x − 3, asociado a los nodos x0 = −1, x1 = 0, x2 = 1 y x3 = 2. Ejercicio 3 Basándose en el algoritmo de Horner, describa cómo se puede evaluar el polinomio interpolador con N multiplicaciones si está escrito en forma de Newton. Ejercicio 4 Pruebe que los polinomios de Lagrange asociados a x0 , x1 , . . . , xN , satisfacen la igualdad L0 (x)+· · ·+LN (x) = 1. ¿Qué razón habrá para que también x0 L0 (x)+x1 L1 (x)+· · ·+xN LN (x) = x? Generalice. 16 Ejercicio 5 Si en el problema de interpolación de Lagrange, la propia función f es un polinomio de grado menor o igual que N, ¿qué polinomio interpolador se obtiene? Si f no es un polinomio y se interpola al interpolante de f , ¿cuál es el resultado? Ejercicio 6 Si buscásemos un polinomio de grado menor o igual que N + 1 que interpolase a f en los N + 1 nodos x0 , . . . , xN , el resultado ya no sería único. Describa todos los posibles interpoladores de este tipo. Ejercicio 7 Determine los valores de λ y µ para los cuales la función λx(x2 + 1), 0 ≤ x ≤ 1 S(x) = −λx3 + µx2 − 5λx + 1, 1 ≤ x ≤ 2 es una spline cúbica. Ejercicio 8 Encontrar el polinomio p de grado menor o igual que 3 que interpola la tabla xj yj 0 1 2 1 2 0 3 -2 y evaluarlo en el punto 3/2. Ejercicio 9 Pruebe que si f es un polinomio de grado menor o igual que N, entonces cualquier diferencia dividida de f de orden N + 1 o mayor es nula. Ejercicio 10 Para cada x 6= x0 , . . . , xN , ¿por qué es cierta la siguiente igualdad f (x) − pN (x) = f [x0 , . . . , xN , x](x − x0 ) . . . (x − xN )? Cambiando N por N − 1, x por xN y aplicando el Teorema 2, deduzca que f [x0 , . . . , xN ] = f (N ) (ξ) , N! para algun ξ ∈ (mı́n(x0 , . . . , xN ), máx(x0 , . . . , xN )). Ejercicio 11 Calcular el spline cúbico asociado a la tabla xj yj -2 -1 0 1 0 0 1 0 2 0 y determinado por la condición "not-a-knot.en ambos extremos. Ejercicio 12 (Primer Parcial 2007) Calcular el valor en x = 3 del polinomio p de grado a lo sumo tres que satisface p(1) = 1, p(2) = −1, p(4) = 2 y p(8) = 1. Ejercicio 13 (Junio 2009) Calcular el spline cúbico s asociado a la tabla xj yj -2 -1 0 0 1 0 1 1 y determinado por la condición "not-a-knot.en x = −2 y sujeto en x = 1 con s′ (1) = 0. Calcular el valor de dicho spline en x = 1/2. 17 Ejercicio 14 Calcular en función de α, el valor en x = 3 del polinomio p de grado a lo sumo tres que satisface p(−1) = 1, p(1) = 0, p(2) = α y p(4) = 3. Ejercicio 15 Calcular el spline cúbico s asociado a la tabla xj yj 0 1 0 1 2 3 sujeto en ambos extremos con s′ (0) = s′ (2) = 0. Calcular el valor de dicho spline en x = 3/2. PROBLEMAS Problema 1 En este problema se abordan diversos aspectos computacionales ligados a la obtención y evaluación del polinomio de interpolación en la forma de Newton. 1. Diseñe una función de Matlab que dados un vector de abscisas [x0 , ..., xN ]T y otro de ordenadas [y0 , ..., yN ]T , devuelva el vector columna de diferencias divididas [y0 , y[x0 , x1 ], ..., y[x0 , x1 , ..., xN ]]. 2. Usando la función anterior, obtenga el polinomio de interpolación, en la forma usual y en la forma de Newton, asociado a la tabla de datos xj yj 0 3 1 -1 2 5 -1 11 Compruebe que ambas expresiones son idénticas. 3. Utilizando la función del apartado uno, diseñe una función que dados un vector de abscisas [x0 , ..., xN ]T , otro de ordenadas [y0 , ..., yN ]T y otro s = [s1 , ..., sJ ]T , devuelva el vector columna [p(s1 ), ..., p(sJ )]T , donde p es el polinomio que interpola a los valores yj en los nodos xj . 4. Utilizando la función anterior, dibuje en el intervalo [−2, 3] el polinomio obtenido en el apartado dos, mostrando gráficamente que pasa por los cuatro puntos (xj , yj ) de la tabla dada. Problema 2 Considere a continuación la función de Bessel J2 (x). 1. Dibuje la función de Bessel J2 (x) en el intervalo [0, 8]. Estime además el valor de su derivada en los puntos x = 2 y x = 8 mediante un cociente incremental con paso h = 10−5 . 2. Mediante el comando spline, dibuje el spline sujeto, basado en los nodos 2, 3, 4, 5, 6, 7 y 8, y con valores de la derivada y2′ = 0,0009 en x = 2, e y8′ = 0,5588 en x = 8. Si no recuerda lo que es el spline sujeto, lea el párrafo inmediatamente anterior al Ejemplo 4. 18 3. ¿Considera que el spline obtenido en el apartado anterior representa bien a J2 en el intervalo [2, 8]? Si se sustityen los valores de la derivada en x = 2 y x = 8 por los obtenidos en el primer apartado, ¿por qué mejora la representación de J2 desde un punto de vista gráfico? ¿Qué ocurre si cambiamos el spline sujeto por el que impone la condición "not-a-knot.en ambos extremos. Estime el error máximo de estos interpolantes averiguando el máximo error sobre los puntos de una partición muy fina de [2,8]. 4. Dibuje ahora el polinomio interpolador basado en los nodos 2, 3, 4, 5, 6, 7 y 8. Estime su error máximo y compare con las estimaciones del error máximo en el apartado anterior. 5. Repita los dos apartados anteriores con con nodos 2, 2,5, 3, . . . , 7,5, 8, con nodos 2, 2,25, 2,5, . . ., 7,75, 8 y con nodos 2, 2,125, 2,5, . . . , 7,775, 8. ¿Qué observa? ¿Qué piensa ahora de lo significativo que pueda ser el ejemplo de Runge visto en la lección? 6. Repita el apartado anterior pero cambiando el intervalo [2, 8] por el intervalo [0, 8]. ¿Cómo debemos entender entonces el ejemplo de Runge? 19 Problema 3 Considere el interpolante del ejemplo de Akima, esto es, el interpolante basado en cúbicas de Hermite que interpola los valores de x e y de la siguiente tabla. xj yj 0 2 10 10 3 5 6 8 9 11 12 10 10 10 10 10.5 15 50 14 15 60 85 1. Sabiendo que mediante la orden interp1 disponemos del valor de la función en cada punto que queramos, ¿cómo podríamos calcular el área que queda entre dicho interpolante y el eje horizontal? 2. Calcule dicho área con un error inferior a 10−4 . 3. ¿Podemos disponer de la derivada de del mencionando interpolante en cada punto? ¿Cómo podríamos entonces calcular la longitud del mismo, sabiendo que la longitud de una curva (x, f (x)), con x ∈ [a, b], viene dada por Z bp 1 + |f ′ (x)|2 dx? a 4. Calcule dicho longitud con un error inferior a 10−4 . Problema 4 (Junio 2006) En el curso hemos visto la interpolación polinómica de Lagrange, donde los nodos de interpolación x0 , . . . , xN deben ser distintos dos a dos y los datos de interpolación son los valores f (x0 ), . . . , f (xN ) de la función f en los nodos. En este problema abordamos la interpolación de Hermite, en el caso particular de la interpolación osculatoria, donde se interpola a f y a su derivada f ′ en lo nodos de interpolación. La forma de Newton del polinomio interpolador osculatorio de grado menor o igual que N que interpola a f y a f ′ en los nodos x0 < x2 < x4 < . . . < xN −1 (note que sólo hay subíndices pares) es como el que hemos visto en el curso, esto es, pN (x) = f (x0 ) + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 ) + + f [x0 , x1 , x2 , x3 ](x − x0 )(x − x1 )(x − x2 ) + · · · + f [x0 , . . . , xN ](x − x0 ), . . . (x − xN −1 ), pero ahora x1 = x0 , x3 = x2 , ..., xN = xN −1 , (9) (N + 1 nodos, pero sólo (N + 1)/2 distintos dos a dos). Las correspondientes diferencias divididas se conocen como diferencias divididas con argumentos repetidos, y se calculan igual que las diferencias divididas que hemos visto en el curso, f [x0 , . . . , xl ] = f [x1 , . . . , xl ] − f [x0 , . . . , xl−1 ] , xl − x0 excepto las de orden uno que son como sigue: gj , f [xj−1 , xj ] = gj − gj−2 , xj − xj−2 si xj = xj−1 si xj 6= xj−1 . donde se satisface (9) y [g0 , g1, g2 , g3 . . . , gN −1 , gN ] = [f (x0 ), f ′ (x1 ), f (x2 ), f ′ (x3 ), . . . , f (xN −1 ), f ′ (xN )]. 20 (10) 1. Escriba la tabla de diferencias divididas con argumentos repetidos de la función f que satisface f (1) = 1, f ′ (1) = 2, f (3) = 3 y f ′ (3) = 4 y escriba la forma de Newton del correspondiente polinomio interpolador osculatorio de grado menor o igual que 4 (aproveche para comprobar que satisface los datos pedidos y que ha entendido cómo se calculan las diferencias con argumentos repetidos). Escriba el valor de p(0). 2. Modifique la función de Matlab de cálculo de diferencias divididas que programamos durante el curso para que dado un vector con las abcisas x0 , . . . , xN satisfaciendo (9) y el vector g de (10), devuelva el vector cuyas componentes son las diferencias divididas con argumentos repetidos f (x0 ), f [x0 , x1 ], f [x0 , x1 , x2 ], . . . , f [x0 , . . . , xN ]. Escriba el listado de la función resultante. 3. Para los nodos x0 = x1 = 1, x2 = x3 = 1,5, x4 = x5 = 2,75 y x6 = x7 = 5, escriba las 6 primeras cifras significativas el valor de f [x0 , . . . , x7 ] si el correspondiente vector g de (10) es g = [1, −1, 2, −2, 3, −3, 4, −4]. 4. Para los datos del apartado anterior, escriba las seis primeras cifras significativas del valor del correspondiente polinomio interpolador osculatorio en x = 3 y x = 4. 21