Guión de la Lección 6 - Matemática Aplicada II

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