Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Interpolación
Introducción
Un problema común en cálculos científicos es el siguiente: conocemos el valor de
una función f(x) en un conjunto de puntos xi i=1,2,…,n tales que {x0 < x1 <…< xn}, pero
carecemos de una expresión analítica para f(x) que nos permita evaluarla en un punto
arbitrario. Los valores conocidos f(xi) provienen a menudo de medidas experimentales o
cálculos numéricos, que, sin embargo, no arrojan información alguna sobre la forma
funcional de f(x).
Nuestro objetivo es estimar el valor de f(x) para un x arbitrario, mediante técnicas
numéricas que vienen a ser equivalentes a hacer pasar una función suave (y conocida) por
los puntos {xi,f(xi)}. Si el valor x para el cual deseamos conocer f(x) es tal que
x ∈ {x1 , x2, ..., xn } entonces nuestro problema es una interpolación. Si por el contrario
Interpolación de Lagrange
Consideremos el caso más sencillo de interpolación polinómica, es decir aquel en el
que conocemos el valor de la función en dos puntos, { y1 , y2 } = { f ( x1 ), f ( x2 )} . La ecuación
de la recta que pasa por estos es:
x − x1 x − x0
y= y0 + y1 (1.1)
x0 − x1 x1 − x0
Que podemos reescribir como:
1
y = P( x) = Lo ( x) y0 + L1 ( x) y1 ,
x − x1 x − x0 (1.2)
L0 ( x) = , L1 ( x) =
x0 − x1 x1 − x0
Donde los polinomios Li toman los valores:
L0 ( x0 ) = 1, L0 ( x1 ) = 0, L1 ( x0 ) = 0, L1 ( x1 ) = 1.
El siguiente caso sería el de la parábola que pasa por tres puntos
{ y1 , y2 , y3 } = { f ( x1 ), f ( x2 ), f ( x3 )} :
y = P( x) = Lo ( x) y0 + L1 ( x) y1 + L2 ( x) y2
( x − x1 )( x − x2 ) ( x − x0 )( x − x2 ) ( x − x0 )( x − x1 ) (1.3)
L0 ( x) = , L1 ( x) = , L2 ( x) =
( x0 − x1 )( x0 − x2 ) ( x1 − x0 )( x1 − x2 ) ( x2 − x0 )( x2 − x1 )
Donde, igualmente:
L0 ( x0 ) = 1, L0 ( x1 ) = 0, L0 ( x2 ) = 0, etc
Podemos, por fin, generalizar al caso de n puntos:
n −1
P( x) = ∑ Lk ( x) yk
k =0
(1.4)
( x − xi )
Lk ( x) = ∏
0≤ i ≠ k ≤ n ( xk − xi )
Donde:
Lk ( x j ) = 1, j = k
(1.5)
= 0, j ≠ k
Ejemplo
Suponed que conocemos los valores de la función f(x) = 1/x en cuatro puntos, según
la siguiente tabla:
x 2 3 4 5
f(x) = 1/x 0.5 0.333333 0.25 0.2
2
x −4 1 x−3 1 1 1
P( x) = L0 ( x) f ( x0 ) + L1 ( x) f ( x1 ) = + = ( x − 3) − ( x − 4)
3− 4 3 4−3 4 4 3
El valor del polinomio en x = 3.5 es:
1 1
P( x = 3.5) = (3.5 − 3) − (3.5 − 4) = 0.2917 mientras que el valor real de la
4 3
función en ese punto es f (3.5) = 0.2857 .
Podemos, a continuación interpolar un polinomio de grados dos a los puntos x =
2,3,4 o bien x = 3,4,5. En el primer caso, tenemos:
P( x) = L0 ( x) f ( x0 ) + L1 ( x) f ( x1 ) + L2 ( x) f ( x2 )
1 1
L0 ( x) = ( x − 3)( x − 4), L1 ( x) = −( x − 2)( x − 4), L2 ( x) = ( x − 2)( x − 3)
2 2
P( x) = L0 ( x) f ( x0 ) + L1 ( x) f ( x1 ) + L2 ( x) f ( x2 )
1 1
L0 ( x) = ( x − 4)( x − 5), L1 ( x) = −( x − 3)( x − 5), L2 ( x) = ( x − 3)( x − 4)
2 2
Puede demostrarse que una cota superior en el error de interpolación viene dada por:
1
ε max = n+2
| ψ n ( x) | (1.7)
x0
3
Las implicaciones de las fórmulas (1.6) y (1.7) son las siguientes. El error de
interpolación se reduce a medida que el producto (1.6) se reduce (lo cual ocurre
normalmente a medida que aumenta el orden del polinomio interpolador) pero también se
reduce a medida que el primer punto de la interpolación se hace grande. Esto nos explica,
en particular, porqué, a la hora de interpolar una parábola al ejemplo anterior, es preferible
utilizar los puntos (3,4,5) (x0 = 3) que los puntos (2,3,4) (x0 = 2).
Es importante darnos cuenta que un polinomio no suele ser apropiado para
extrapolar una función, a no ser que el punto al que queramos extrapolar esté próximo al
intervalo en el cual conocemos la función. En otro caso el término 1/(x0 n+2) hace que el
error aumente muy deprisa.
Finalmente, debemos insistir en que la interpolación polinómica no da buenos
resultados cuando la función que queremos interpolar no es lo suficientemente suave.
4
P( x0 ) = f ( x0 ) = p0
P( x1 ) = f ( x1 ) = p0 + p1 ( x1 − x0 )
(1.9)
P( x2 ) = f ( x2 ) = p0 + p1 ( x2 − x0 ) + p1 ( x2 − x0 )( x2 − x1 )
....
Introduciendo las diferencias divididas:
f [ x0 ] = f ( x0 )
( f [ x1 ] − f [ x0 ])
f [ x0 , x1 ] =
( x1 − x0 )
( f [ x1 , x2 ] − f [ x0 , x1 ])
f [ x0 , x1 , x2 ] = (1.10)
( x2 − x0 )
...
( f [ x1 , x2 ,...xk +1 ] − f [ x0 , x1 ,...xk ])
f [ x0 , x1 , x2 ,...xk +1 ] =
( xk +1 − x0 )
Podemos escribir:
P( x0 ) = p0 = f ( x0 ) = f [ x0 ]
P( x1 ) = p0 + p1 ( x1 − x0 ) = f [ x1 ]
P( x2 ) = p0 + p1 ( x2 − x0 ) + p1 ( x2 − x0 )( x2 − x1 ) f ( x2 ) = f [ x2 ]
....
De tal manera que:
p0 = f [ x0 ]
f [ x0 ] − f [ x1 ]
p1 = = f [ x0 , x1 ]
( x1 − x0 )
1
p2 = ( f ( x2 ) − p0 − p1 ( x2 − x0 )) =
( x2 − x0 )( x2 − x1 )
1 f ( x1 ) − f ( x0 )
( f ( x2 ) − f ( x0 ) − ( x2 − x0 )) =
( x2 − x0 )( x2 − x1 ) x1 − x0
1
(( x1 − x0 )( f ( x2 ) − f ( x0 )) − ( x2 − x0 )( f ( x1 ) − f ( x0 )) =
( x2 − x0 )( x2 − x1 )( x1 − x0 )
f ( x2 ) f ( x1 ) f ( x0 )
+ +
( x2 − x0 )( x2 − x1 ) ( x2 − x1 )( x1 − x0 ) ( x2 − x0 )( x1 − x0 )
5
f [ x1 , x2 ] − f [ x0 , x1 ]
f [ x0 , x1 , x2 ] = =
x2 − x0
1 f ( x2 ) − f ( x1 ) f ( x1 ) − f ( x0 )
( − )=
x2 − x0 x2 − x1 x1 − x0
1 f ( x2 ) − f ( x1 ) f ( x1 ) − f ( x0 )
( − )=
x2 − x0 x2 − x1 x1 − x0
1
(( x1 − x0 )( f ( x2 ) − f ( x1 )) − ( x2 − x1 )( f ( x1 ) − f ( x0 )) =
( x2 − x0 )( x2 − x1 )( x1 − x0 )
f ( x2 ) f ( x1 ) f ( x0 )
+ +
( x2 − x0 )( x2 − x1 ) ( x2 − x1 )( x1 − x0 ) ( x2 − x0 )( x1 − x0 )
Y por lo tanto:
p0 = f [ x0 ]
p1 = f [ x0 , x1 ]
p2 = f [ x0 , x1 , x2 ] (1.11)
....
n
P( x) = f [ x0 ] + ∑ f [ x0 , x1 ,..., xk ]( x − x0 )( x − x1 )...( x − xk −1 )
k =1
La ecuación (1.11) no es sino una relación de recurrencia que nos permite, obtener
el polinomio interpolador que pasa por n puntos, a partir del polinomio que pasa por n – 1
puntos. Supongamos por ejemplo que queremos interpolar un polinomio a una función
cuyo valor conocemos en cuatro puntos, tal como la del ejemplo anterior:
x 2 3 4 5
f(x) = 1/x 0.5 0.333333 0.25 0.2
6
P ( x) = f [ x0 ] + f [ x0, x1 ]( x − x0 ) + f [ x0, x1 , x2 ]( x − x0 )( x − x1 )
Los primeros dos términos ya están calculados y sólo nos falta añadir el término
adicional:
f [ x1 , x2 ] − f [ x0 , x1 ]
f [ x0, x1 , x2 ] =
( x2 − x0 )
f ( x1 ) − f ( x0 ) f (4) − f (3)
f [ x0 , x1 ] = = = 0.25 − 0.3333 = −0.0833
( x1 − x0 ) (4 − 3)
f ( x2 ) − f ( x1 ) f (5) − f (4)
f [ x1 , x2 ] = = = 0.20 − 0.25 = −0.05
( x2 − x1 ) (5 − 4)
−0.05 + 0.0833
f [ x0, x1 , x2 ] = = 0.01665
5−3
Algoritmo de Neville
Este es otro ejemplo de método iterativo, basado en una relación de recurrencia. Sea
P1 el valor en x del polinomio único de grado cero (es decir, una constante) que pasa por el
punto (x1,y1), y1 = f(x1). Definimos de manera análoga P2, P3,...,PN. Sea ahora P12 el valor
en x del único polinomio de grado uno que pasa por los puntos (x1,y1) y (x2,y2).
Análogamente, definimos P23, P34,...,P(N-1),N. De manera similar, definimos los sucesivos
polinomios de orden superior hasta llegar al polinomio P1,2,3,...,N que es el valor del
polinomio único de grado n –1 que pasa por los n puntos.
De manera análoga a como hemos obtenido la ecuación (1.11) es posible encontrar
la relación de recurrencia entre un polinomio “hijo” P y sus dos “padres”:
( x − xi + m ) Pi (i +1)...(i + m −1) + ( xi − x) Pi (i +1)(i + 2)...(i + m )
Pi (i +1)...(i + m ) = (1.12)
xi − xi + m
7
Consideremos, por ejemplo, el caso de una parábola que pasa por los puntos
( x1 , y1 ), ( x2 , y2 ), ( x3 , y3 ) . Los polinomios relevantes son:
P1 = y1 P2 = y2 P3 = y3
( x − x2 ) P1 + ( x1 − x) P2 ( x − x2 ) y1 + ( x1 − x) y2
P12 = =
( x1 − x2 ) ( x1 − x2 )
( x − x3 ) P2 + ( x2 − x) P3 ( x − x3 ) y2 + ( x2 − x) y3
P23 = =
( x2 − x3 ) ( x2 − x3 )
( x − x3 ) P12 + ( x1 − x) P23
P123 = =
( x1 − x3 )
( x − x2 ) y1 + ( x1 − x) y2 ( x − x3 ) y2 + ( x2 − x) y3
( x − x3 ) + ( x1 − x)
( x1 − x2 ) ( x2 − x3 )
=
( x1 − x3 )
( x − x2 )( x − x3 ) ( x − x1 )( x − x3 ) ( x − x1 )( x − x3 ) ( x − x)( x2 − x)
y1 − y2 − y2 + 1 y3 =
( x1 − x2 )( x1 − x3 ) ( x1 − x2 )( x1 − x3 ) ( x2 − x3 )( x1 − x3 ) ( x2 − x3 )( x1 − x3 )
( x − x2 )( x − x3 ) ( x − x1 )( x − x3 ) ( x − x1 )( x − x2 )
y1 + y2 + y3
( x1 − x2 )( x1 − x3 ) ( x2 − x1 )( x2 − x3 ) ( x3 − x2 )( x3 − x1 )
Ejercicio: Calcular el tablero (1.13) para la función f(x) = 1/x en los puntos
(2,3,4,5).
8
x1 = 2 : y1 = P1 = 0.5000
P12 = 0.2500
x2 = 3 : y2 = P2 = 0.3333 P123 = 0.2813
P23 = 0.2917 P1234 = 0.2844
x3 = 4 : y3 = P3 = 0.2500 P234 = 0.2875
P34 = 0.2750
x4 = 5 : y4 = P4 = 0.2000
Integración Numérica
Introducción
Nuestro problema es calcular la integral definida de una función f(x):
b
∫ f ( x)dx
a
Ejercicio
Integrar la función seno aproximándola por una parábola.
9
P( x) = Lo ( x) f (a ) + L1 ( x) f (b)
b−x x−a
Lo ( x) = L1 ( x) =
b−a b−a
b
∫ f ( x )d ( x ) = f ( a ) A
a
0 + f (b) A1
b b
1 1 (1.15)
A0 = ∫ Lo ( x)dx = ∫ (b − x)dx = (b − a )
a
b−aa 2
b b
1 1
A1 = ∫ L1 ( x)dx = ∫ ( x − a )dx = (b − a )
a
b−aa 2
b−a
b
∫ f ( x )d ( x ) =
a
2
( f (a ) + f (b))
Una forma inmediata de refinar la regla del trapecio consiste en dividir el intervalo
de integración (a,b) tal que a = x0 < x1 < x2 <,... <, xn = b y aplicar la regla a cada uno de los
b−a
subintervalos. Si escogemos un espaciado o paso de rosca constante h = , de tal
n
manera que:
xi = a + ih
f 0 = f (a ), f1 = f (a + h) = f ( x1 )...etc
Entonces:
b a+h a+2h b
∫ f ( x)dx = ∫
a a
f ( x)dx + ∫
a+h
f ( x)dx +... ∫ f ( x)dx =
b−h
h h h
( f 0 + f1 ) + ( f1 + f 2 ) + ... ( f n −1 + f n ) = (1.16)
2 2 2
n −1
1 h
h( f 0 + f1 + f 2 + ... + f n −1 + f n ) = ( f (a ) + f (b) + 2∑ f (a + ih))
2 2 i =1
Obtenemos así la regla del trapecio compuesta. El orden del error en la regla del
trapecio es O(h3 f ’’) .
Regla de Simpson
La regla de Simpson la obtenemos utilizando una parábola como polinomio
interpolador, en lugar de una recta. Tomando como tercer punto el punto medio entre los
extremos a y b del intervalo:
10
b−a a+b
b
∫ f ( x)dx =
a
6
( f (a ) + 4 f (
2
) + f (b)) (1.17)
El orden del error para la regla de Simpson es O(h5 f (4) ) . Análogamente podemos
obtener fórmulas interpolando polinomios de grado 3, 4, etc, etc.
Integración de Romberg
La regla de suma de Euler-MacLaurin establece una relación entre la integral
definida de una función, I, y la aproximación a dicha integral a partir de la regla trapezoidal
con n intervalos, Tn:
b
I = ∫ f ( x)dx = Tn + A2 h 2 + A4 h 4 + A6 h 6 + ... (1.19)
a
11
Así pues hemos pasado de una regla con error O(h 2 ) a otra con error O(h 4 ). Con
esta técnica podemos reducir el orden del error tanto como se quiera. Duplicando otra vez
el número de intervalos obtendremos ahora una combinación que nos permitirá calcular la
integral a orden O(h 6 ) y así sucesivamente. Esta técnica se conoce como extrapolación de
Richardson.
El uso conjunto de la extrapolación de Richardson y la regla trapezoidal duplicando
sucesivamente el número de intervalos se conoce como regla de Romberg. La idea es
interpolar un polinomio al conjunto:
{(h1 , F1 ), (h2 , F2 ), (h3 , F3 )...(hn , Fn )}, donde
b−a b−a b−a
h1 = , h2 = , h3 = ...
1 2 4
F1 = F (h1 ) = T2 + A2 h12 + A4 h14 + ... (1.22)
F2 = F (h2 ) = T4 + A h + A h + ...
2
2 2
4
4 2
12