Lección 18
Transcripción
Lección 18
Lección 17. Interpolación de trazadores cúbicos MIGUEL ANGEL UH ZAPATA1 Análisis Numérico I Facultad de Matemáticas, UADY Noviembre de 2014 1 Centro de Investigación en Matemáticas, Unidad Mérida. En esta lección se presenta la descripción de la interpolación de trazadores cúbicos o mejor conocidos como splines. Al final debemos de: conocer lo que un spline cúbico. analizar las similitudes y diferencias con la interpolación lineal a trozos y otros procesos de interpolación. programar el código que reqliza dicha interpolación. Análisis Numérico 1. Interpolación de trazadores cúbicos Al igual que la interpolación lineal a trozos, este procedimiento consiste en dividir el intervalo en una serie de subintervalos, y en cada subintervalo construir un polinomio diferente de aproximación. A esta forma de aproximar se le conoce como aproximación polinómica fragmentaria. La aproximación polinómica fragmentaria más común utiliza polinios entre cada par consecutivo de nodos y recibe el nombre de interpolación de trazadores cúbicos. Es decir, en este caso los polinomios serán de grado 3, ver la siguiente figura. Un polinomio cúbico general contiine cuatro constantes P (x) = αx3 + βx2 + γx + δ ası́ pues, el procedimiento de trazador cúbico ofrece suficiente flexibilidad para garantizar que el interpolante no sólo sea continuamente diferenciable en el intervalo, sino que además tenga segunda derivada continua en ele intervalo. Definición Dada una función f definida en [a, b] y un conjunto de nodos a = x0 < x1 < x2 < · · · < xn−1 < xn = b un interpolante de trazador cúbico S para f es una función que cumple las siguientes condiciones (a) S(x) es un polinomio cúbico, denotado Sj (x) para [xj , xj+1 ] para cada j = 0, 1, 2, . . . , n − 1; (b) S(xj ) = f (xj ) = yj para cada j = 0, 1, 2, . . . , n; (c) Sj+1 (xj+1 ) = Sj (xj+1 ) para cada j = 0, 1, 2, . . . , n − 2; 0 (d) Sj+1 (xj+1 ) = Sj0 (xj+1 ) para cada j = 0, 1, 2, . . . , n − 2; 00 (e) Sj+1 (xj+1 ) = Sj00 (xj+1 ) para cada j = 0, 1, 2, . . . , n − 2; (f) Una de las siguientes considiciones de frontera se satisface: 00 Sj+1 (x0 ) = Sj00 (xn ) = 0 (frontera libre o natural) Frontera sujeta Si queremos construir el interpolante del trazador cúbico de determinada función f , aplicamos las consiciones de la definición a los polinomios cúbicos como se presentará a continuación. Splines Cúbicos 3 1.1 1.1. Construcción de Sj Análisis Numérico Construcción de Sj Tenemos que en cada intervalo [xj , xj+1 ] podemos escribir al polinomio cúbico Sj (x) como: Sj (x) = aj + bj (x − xj ) + cj (x − xj )2 + dj (x − xj )3 para cada j = 0, 1, 2, . . . , n − 1. Entonces debemos de encontrar cada uno de los coeficientes aj , bj , cj y dj para cada subintervalo. La estrategia será aplicar cada una de las condiciones y reducir nuestro problema a encontrar en un sistema de ecuaciones donde la solución será los coeficientes buscados. Para aplicar las condiciones (d) y (e), es necesario encontras las primeras tres derivadas de la función S, facilmente podemos ver que Sj (x) = aj + bj (x − xj ) + cj (x − xj )2 + dj (x − xj )3 Sj0 (x) Sj00 (x) = bj + 2cj (x − xj ) + 3dj (x − xj )2 = 2cj + 6dj (x − xj ) Condición (b) La ventaja de escribir el polinomio de la forma anterior es que no sólo ya hemos satisfecho la condición (a), sino también automáticamente podemos encontrar los coeficientes aj mediante la condición (b), ası́ Sj (xj ) = aj + bj (xj − xj ) + cj (xj − xj )2 + dj (xj − xj )3 = aj y por (b) S(xj ) = Sj (xj ) = f (xj ) = yj entonces aj = f (xj ) = yj para j = 0, 1, 2, . . . , n − 1. (1) Podemos observar que el último coeficiente an aún no está definido, entonces lo definimos an = f (xn ). Ahora sólo nos falta encontrar los coeficientes bj , cj y dj . Condición (c) Simplemente tenemos que evaluar la función Sj+1 y Sj en los correspondientes puntos xj+1 para j = 0, 1, 2, . . . , n − 2, es decir Sj+1 (xj+1 ) = Sj (xj+1 ). Ası́ Sj+1 (xj+1 ) Sj (xj+1 ) = yj+1 + bj+1 (xj+1 − xj+1 ) + cj+1 (xj+1 − xj+1 )2 + dj+1 (xj+1 − xj+1 )3 = yj+1 = yj + bj (xj+1 − xj ) + cj (xj+1 − xj )2 + dj (xj+1 − xj )3 Si llamamos a las constantes hj = xj+1 − xj entonces bj hj + cj h2j + dj h3j = yj+1 − yj Ası́ despejando en términos de bj Splines Cúbicos 4 1.1 Construcción de Sj Análisis Numérico bj = −cj hj − dj h2j + 1 (yj+1 − yj ) hj (2) para j = 0, 1, 2, . . . , n − 1. De manera similar a la condición anterior, no tenemos definido el coeficiente bn . Lo que haremos será definirlo de la forma siguiente bn = S 0 (xn ). Condición (d) De la misma manera aplicar la condición (d) significa evaluar la primera derivada de los polinomios Sj+1 y Sj en los correspondientes puntos xj+1 e igualarlos para j = 0, 1, 2, . . . , n − 2, es decir 0 Sj+1 (xj+1 ) = Sj0 (xj+1 ). Ası́ 0 Sj+1 (xj+1 ) = bj+1 + 2cj+1 (xj+1 − xj+1 ) + 3dj+1 (xj+1 − xj+1 )2 = bj+1 Sj0 (xj+1 ) = bj + 2cj (xj+1 − xj ) + 3dj (xj+1 − xj )2 Entonces 2cj hj + 3dj h2j = bj+1 − bj (3) para j = 0, 1, 2, . . . , n − 1. De la ecuación anterior faltará definir cn . En este caso lo definiremos como cn = S 00 (xn )/2. Condición (e) Finalmente aplicanco la condición (e) la segunda derivada de los polinomios Sj+1 y Sj en los corres00 pondientes puntos xj+1 e igualarlos para j = 0, 1, 2, . . . , n − 2, es decir Sj+1 (xj+1 ) = Sj00 (xj+1 ). Ası́ 00 Sj+1 (xj+1 ) Sj00 (xj+1 ) = 2cj+1 + 6dj+1 (xj+1 − xj+1 ) = 2cj+1 = 2cj + 6dj (xj+1 − xj ) Entonces 6dj hj = 2cj+1 − 2cj Por lo tanto dj = Splines Cúbicos 1 (cj+1 − cj ) 3hj (4) 5 1.1 Construcción de Sj Análisis Numérico Simplificando Finalmente tenemos tres relacion dadas por (2), (3) y (4): bj = −cj hj − dj h2j + bj+1 − bj = 2cj hj + 3dj h2j dj = 1 (cj+1 − cj ) 3hj 1 (yj+1 − yj ) hj Sustituyendo (4) en las ecuaciones (3) tenemos que bj+1 − bj = 2cj hj + 3 1 (cj+1 − cj )h2j 3hj Entonces bj+1 − bj = 2cj hj + (cj+1 − cj )hj Por lo tanto bj+1 − bj = (cj+1 + cj )hj (5) Por otro lado sustituyendo (4) en las ecuaciones (2) tenemos que bj = −cj hj − 1 1 (cj+1 − cj )h2j + (yj+1 − yj ) 3hj hj 1 1 1 bj = −cj hj − cj+1 hj + cj hj + (yj+1 − yj ) 3 3 hj Entonces bj = − 1 hj (cj+1 + 2cj ) + (yj+1 − yj ) 3 hj Y para bj+1 (cambiando el ı́ndice a j + 1) bj+1 = − 1 hj+1 (cj+2 + 2cj+1 ) + (yj+2 − yj+1 ) 3 hj+1 Ası́ tomando la diferencia entre ambas ecuaciones hj+1 1 (cj+2 + 2cj+1 ) + (yj+2 − yj+1 ) bj+1 − bj = − 3 hj+1 hj 1 − − (cj+1 + 2cj ) + (yj+1 − yj ) 3 hj Si llamamos W = 1 hj+1 entonces bj+1 − bj = − (yj+2 − yj+1 ) − 1 (yj+1 − yj ) hj (6) hj+1 hj (cj+2 + 2cj+1 ) + (cj+1 + 2cj ) + W 3 3 Ası́ Splines Cúbicos 6 1.1 Construcción de Sj Análisis Numérico bj+1 − bj = hj+1 − 3 2hj+1 hj 2hj cj+2 + − + cj+1 + cj + W 3 3 3 (7) Finalmente igualando las eciaciones (5) y (7) llegamos a la ecuación hj+1 2hj+1 hj 2hj cj+1 hj + cj hj = − cj+2 + − + cj+1 + cj + W 3 3 3 3 Entonces (hj )cj+1 + (hj )cj + hj+1 3 cj+2 + 2hj+1 hj − 3 3 2hj cj+1 + − cj = W 3 Entonces (3hj )cj+1 + (3hj )cj + (hj+1 ) cj+2 + (2hj+1 − hj ) cj+1 + (−2hj ) cj = W Y por lo tanto (hj+1 ) cj+2 + 2 (hj+1 + hj ) cj+1 + (hj ) cj = 3 hj+1 (yj+2 − yj+1 ) − 3 (yj+1 − yj ) hj Para mayor claridad de la ecuación tomemos el ı́ndice reducido en 1. Entonces [hj ] cj+1 + [2(hj + hj−1 )] cj + [hj−1 ] cj−1 = 3 3 (yj+1 − yj ) − (yj − yj−1 ) hj hj−1 (8) para cada j = 1, 2, 3, ..., n − 1. Condición (f) El sistema anterior contiene sólo c0 , c1 , c2 , ...cn como incógnitas, pero podemos observar que sólo hay n − 1 ecuaciones. De manera que es necesario dos ecuaciones adicionales para poder tener una solución única. Estas condiciones estarán dadas por (f). El siguiente teorema indica que esto es posible. Teorema Si definimos f en a = x0 < x1 < x2 < · · · < xn−1 < xn = b entonces f tendrá un interpolante único de trazador natural en los nodos x0 , x1 , x2 , ..., xn ; es decir, un interpolante de trazador que cumple con las condiciones de frontera S 00 (a) = S(b) = 0. Las condiciones de frontera satisfacen que S000 (x0 ) = 2c0 + 6dj (x0 − x0 ) = 2c0 = 0 entonces c0 = 0. Y para la otra frontera, anteriormente definimos cn = S 00 (xn )/2 = 0 de manera que cn = 0 . Splines Cúbicos 7 1.2 1.2. Sistema de ecuaciones para cj Análisis Numérico Sistema de ecuaciones para cj Las dos ecuaciones c0 = 0 y cn = 0 junto con las ecuaciones de (8) producen un sistema lineal descrito por la ecuación vectorial Ax = b donde A es la matrix de (n + 1) × (n + 1) dado que tenemos n + 1 puntos. 1 0 0 0 ··· 0 h0 2(h0 + h1 ) h 0 · · · 0 1 0 h 2(h + h ) h · · · 0 1 1 2 2 A= . . . . . .. .. .. .. .. 0 0 ··· 0 hn−2 2(hn−2 + hn−1 ) hn−1 0 ··· ··· 0 0 1 y donde b y x son los vectores b= 0 3 h1 (y2 3 h2 (y3 3 h0 (y1 3 h1 (y2 − y2 ) − − y1 ) .. . 3 3 hn−1 (yn − yn−1 ) − hn−2 (yn−1 − yn−2 ) 0 − y1 ) − − y0 ) c0 c1 c2 x= .. . cn−1 cn Como podemos observar este sistema es tridiagonal el cual podemos programar fácilmente. 1.3. Caso particular Para entender mejor el procedimiento anterior consideremos el caso particular cuando tenemos sólamente 6 puntos. En este caso x y x0 y0 x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 De modo que únicamente tenemos 5 funciones Sj determinadas por S0 (x) = a0 + b0 (x − x0 ) + c0 (x − x0 )2 + d0 (x − x0 )3 S1 (x) = a1 + b1 (x − x1 ) + c1 (x − x1 )2 + d1 (x − x1 )3 S2 (x) = a2 + b2 (x − x2 ) + c2 (x − x2 )2 + d2 (x − x2 )3 S3 (x) = a3 + b3 (x − x3 ) + c3 (x − x3 )2 + d3 (x − x3 )3 S4 (x) = a4 + b4 (x − x4 ) + c4 (x − x4 )2 + d4 (x − x4 )3 Ahora los valores aj ya los conocemos y están dados por Splines Cúbicos a0 = y0 a1 = y1 a2 = y2 a3 = y3 a4 = y4 8 1.3 Caso particular Análisis Numérico Los valores cj están determinados resolviendo el siguiente sistema 1 0 0 0 0 h0 2(h0 + h1 ) h1 0 0 0 h1 0 0 0 0 0 0 0 0 2(h1 + h2 ) h2 0 0 h2 2(h2 + h3 ) h3 0 0 h3 2(h3 + h4 ) h4 0 0 0 1 c0 0 c1 c2 c3 c4 c5 3 h1 (y2 3 h2 (y3 3 h3 (y4 − y1 ) − 3 h0 (y1 3 h1 (y2 3 h2 (y3 − y0 ) − y2 ) − − y1 ) − y3 ) − − y2 ) 3 3 (y − y ) − (y − y ) 5 4 4 3 h4 h3 0 donde h0 = x1 − x0 h1 = x2 − x1 h2 = x3 − x2 h3 = x4 − x3 h4 = x5 − x4 Una vez calculados los valores de cj podemos calcular los valores de dj y bj usando las fórmulas bj = −cj hj − dj h2j + dj = 1 (cj+1 − cj ) 3hj 1 (yj+1 − yj ) hj para j = 0, 1, 2, 3, 4, 5 para j = 0, 1, 2, 3, 4, 5 Ası́ finalmente tenemos completado todos los coeficientes correspondientes a los polinomios Sj (x). Es importante recordar que si se desea encontrar todos los coeficientes con MATLAB, este no admite ı́nices 0, por lo que los ı́ndices deben ser determinados desde j = 1, ..., 6 para los puntos xj y j = 1, ..., 5 para los coeficientes aj , bj , cj , dj y polinomios Sj . Ahora si deseamos interpolar un valor u (o un vector), necesitamos determinar en que intervalo se encuentra y ası́ usar la función correcta. En Matlab el ı́ndice j correcpondiente al intervalo [xj , xj+1 ] estarı́a dada por %______________________________________ % Encontrar el indices j del intervalo % x(j)≤ u(k) <x(j+1) m = length(u); indicej = ones(m,1); for k=1:m for j=2:n-1 if x(j)≤u(k) indicej(k)=j; end end end Finalemente, cada valor x = u(k) puede ser interpolado y obtener el valor S(x) = v(k) mediante las evaluaciones Splines Cúbicos 9 1.4 Programa Análisis Numérico %______________________________________ % Evaluar la interpolación v = zeros(m,1); for k =1:m j = indicej(k); v(k) = a(j) ... + b(j)*(u(k)-x(j)) ... + c(j)*(u(k)-x(j))ˆ2 ... + d(j)*(u(k)-x(j))ˆ3; end 1.4. Programa PROXIMAMENTE ... function v = InterpoSplines(x,y,u) n = length(x); . . . end Aquı́ la interpolación que pasa por los puntos x y Splines Cúbicos 1 16 2 18 3 21 4 17 5 15 6 12 10