Está en la página 1de 12

Práctica 6 INTERPOLACIÓN

6.1. Interpolación Polinómica

Datos de interpolación: 8Hx k , f k L< k =0,1,

Conocemos los valores de una función, f k = f Hx k L, en n + 1 puntos distintos, x k , de un intervalo [a,b]

,n

Funciones interpolantes: Polinomios de grado menor o igual que n

pHxL = a 0 + a 1 x + a 2 x 2 +

+ a n x n

Problema de interpolación: Determinar los coeficientes a 0 , a 1 , condiciones de interpolación:

pHx k L = f k ,

k = 0, 1,

,

n

, a n para que se cumplan las

Método de Lagrange

Consiste en calcular previamente los polinomios L i HxL, cardinales de Lagrange, que verifican:

L i Hx i L = 1,

Estos polinomios vienen dados por la expresión

i=0,1,

,n,

llamados polinomio de Lagrange o funciones

L i Ix j M = 0, i j

n

L i HxL =

j=0

ji

x x j x i x j

El polinomio de interpolación se escribe entonces en la forma

pHxL = f 0 L 0 HxL + f 1 L 1 HxL +

n

+ f n L n HxL = f i L i HxL

i=0

EJEMPLO 1

Calcular el polinomio que interpola al conjunto de datos

Definimos los puntos

{(-1,2),(2,8),(5,-3), (8,10)}

2

Practica6_Interpolacion.nb

Definimos los nodos

In[2]:=

x 0 = − 1; x 1 = 2; x 2 = 5; x 3 = 8;

 

In[3]:=

f 0 = 2; f 1 = 8; f 2 = − 3; f 3 = 10;

 

Calculamos los polinomios de Lagrange

   

Hx x 1 LH x x 2 LHx x 3 L

In[4]:=

L 0 @x_D =

 
 

Hx 0 x 1 LHx 0 x 2 LH x 0 x 3 L

 

1

Out[4]=

162 H8 + xLH5 + xLH2 + xL

 
 

Hx x 0 LH x x 2 LHx x 3 L

In[5]:=

L 1 @x_D =

 
 

Hx 1 x 0 LHx 1 x 2 LH x 1 x 3 L

 

1

Out[5]=

54 H8 + xLH5 + xLH1 + xL

 
 

Hx x 0 LH x x 1 LHx x 3 L

In[6]:=

L 2 @x_D =

 
 

Hx 2 x 0 LHx 2 x 1 LH x 2 x 3 L

 

1

Out[6]=

H8 + xLH2 + xLH1 + xL

 

54

 

Hx x 0 LH x x 1 LHx x 2 L

In[7]:=

L 3 @x_D =

 
 

Hx 3 x 0 LHx 3 x 1 LH x 3 x 2 L

 

1

Out[7]=

162 H5 + xLH2 + xLH1 + xL

 

Cálculo del polinomio de inteprolación

In[8]:=

polisolu = f 0 L 0 @x D + f 1 L 1 @xD + f 2 L 2 @ xD + f 3 L 3 @x D

 

1

4

Out[8]=

81

H8 + xLH5 + xLH2 + xL + 27 H8 + xLH5 + xLH1 + xL +

1

5

18

H8 + xLH2 + xLH1 + xL + 81 H5 + xLH2 + xLH1 + xL

Practica6_Interpolacion.nb

3

In[9]:=

Expand @ polisoluD

 

682

100 x

133 x 2

41 x 3

Out[9]=

 

+

+

81

27

54

162

Visualización de resultados

 

In[10]:=

g1 = ListPlot@ puntos, PlotStyle PointSize@ 0.02D , DisplayFunction IdentityD; g2 = Plot@ polisolu, 8x, 1.2, 8.2<, DisplayFunction IdentityD; Show@ g1, g2, DisplayFunction $DisplayFunctionD

Out[12]=

10 5 2 4 6
10
5
2
4
6

8

Método de Newton (Diferencias divididas)

Consiste en escribir el polinomio de interpolación en la forma:

pHxL = A 0 + A 1 Hx x 0 L + A 2 Hx x 0 Hx x 1 L +

+ A n1 Hx x 0 Hx x 1 L

Los coeficientes A k , que se denominan diferencias divididas de la función f en los puntos x 0 , x 1 ,

[x 0 , x 1 ,

x k ] y se generan de forma recursiva mediante la fórmula

Hx x n1 L

x k , se denotan por A k = f

f@ x 0 , x 1 ,

partiendo de f[x 0 ]=f(x 0 ).

f@x 1 , x 2 ,

x k D =

x k D f@ x 0 , x 1 ,

Hx k x 0 L

x

k1 D

,

k = 1, 2,

,

n

Con esta notación, el polinomio de interpolación puede escribirse como

pHxL = f@x 0 D + f@x 0, x 1 DHx x 0 L + f@x 0, x 1 , x 2 DHx x 0 LHx x 1 L +

EJEMPLO 2

f@x 0, x 1 ,

, x n DHx x 0 LHx x 1 L

Hx x n1 L.

Calcular el polinomio que interpola al conjunto de datos

+

8H5, 1L, H3, 2L, H2, 10L, H3, 2L, H6, 0L, H8, 3L<

4

Practica6_Interpolacion.nb

Entrada de datos

In[13]:=

puntos = 885, 1< , 83, 2< , 82, 10<, 83, 2< , 86, 0< , 8 8, 3<<;

Determinamos los nodos y los valores de la función

In[14]:=

n = Length@ puntosD 1; For@i = 0, i n, i ++, x i = puntos@@i + 1, 1DD; f i = puntos@@i + 1, 2 DDD

Generamos la tabla de diferencias divididas (creamos una matriz rectangular de orden (2n+2)× (n+2) que llamanos dif y cuyos elementos son de la forma d[i,j], con i=-1,0,…,2n y j=-1,0,…, n.

In[16]:=

Clear@d D ; dif = Array@d, 82 n + 2, n + 2<, 1 D;

A continuación rellenamos la matriz con espacios

In[18]:=

For@i = − 1, i 2 n, i ++, For@j = − 1, j n, j ++, d @i, jD = " " DD

Ahora rellenamos la primera y segunda filas (fila -1 y fila 0, respectivamente) con los datos de interpolación y ponemos de cabecera el texto “x k ” y “ f k ” en la posición (-1,-1) y (-1,0) , respectivamente.

In[19]:=

d @1, 1D = "x k "; d @1, 0 D = "f k "; For@i = 0, i n + 1, i ++, d @2 i, 1D = x i ; d @2 i, 0D = f i D;

Visualizamos el resultado

In[20]:=

dif êê MatrixForm

Out[20]//MatrixForm=

x k

5

3

f k

1

2

2 10

3 2

6 0

8 3

Finalmente calculamos los restantes elementos de la tabla aplicando la ley de recurrencia

In[21]:=

ForBj = 1, j n, j ++, ForB i = j, i 2 n j, i = i + 2,

d @i, jD =

d @i + 1, j 1D d @ i 1, j 1 D

d @i + j, 1D d @ i j, 1D

FF

Practica6_Interpolacion.nb

Visualizamos el resultado final

In[22]:=

dif êê MatrixForm

Out[22]//MatrixForm=

5

x k

f k

5

1

 

1

2

3

2

11

 

70

 

8

123

 

 

5

560

2

10

8

9089

 

5

166 320

 

103

19 897

 

8

 

 

270

2 162 160

3

2

11

193

 

6

2970

2

1

 

 

3

3

6

0

 

1

6

 

3

 

 

2

8

3

Calculamos el polinomio de interpolación

In[23]:=

Out[23]=

In[24]:=

Out[24]=

n

k 1

polisolu = d @ k, k D I x x j M

k =0

j = 0

1 +

5 + x

2

11 123

+ 70 H3 + xLH5 + xL 560 H2 + xLH3 + xLH5 + xL +

9089 H3 + xL H2 + xL H3 + xL H5 + xL

166 320

19 897 H6 + xL H3 + xL H2 + xL H3 + xL H5 + xL

2 162 160

Expand @ polisoluD

67 069

109 171 x

810 709 x 2

615 757 x 3

2021 x 4

19 897 x 5

 

+

+

3003

60 060

270 270

2 162 160

24 570

2 162 160

Visualizamos el resultado (en las variables xmin y xmax, guardamos el valor mínimo y máximo de los nodos)

6 Practica6_Interpolacion.nb In[25]:= xmin = Min@ Table@ x i , 8 i, 0, n <DD
6
Practica6_Interpolacion.nb
In[25]:=
xmin = Min@ Table@ x i , 8 i, 0, n <DD ;
xmax = Max@ Table@ x i , 8 i, 0, n <DD ;
g1 = ListPlot@ puntos, PlotStyle → PointSize@ 0.02`D, DisplayFunction → IdentityD ;
g2 = Plot@ polisolu, 8x, xmin − 0.2`, xmax + 0.2`<, DisplayFunction → IdentityD;
Show@ g1, g2, DisplayFunction → $DisplayFunctionD
20
15
10
Out[29]=
5
-4
-2
2
4
6
8
-5

6.2. Interpolación polinómica con Mathematica

El programa Mathematica puede calcular directamente el polinomio de interpolación mediante la instrucción:

InterpolatingPolynomial[ puntos, variable ]

Calcula el polinomio de interpolación en la variable especificada para el conjunto de puntos dados en la forma:

EJEMPLO 3

puntos=88x 0 , f 0 <, 8x 1 , f 1 <,

, 8x n , f n <<.

Determinar el polinomio que interpola al conjunto de puntos

{ (0,0), (3,2), (5,2), (7,3), (9,5), (11,3) }

Introducimos los datos

In[30]:=

puntos := 880, 0<, 83, 2< , 85, 2 <, 8 7, 3 <, 89, 5<, 811, 3 <<

Calculamos el polinomio

 

In[31]:=

p@ x _D = InterpolatingPolynomial@ puntos, xD

 

2 2

 

31

31

1079 H9 + xL

Out[31]=

+

+

+

H7 + xL H5 + xL H3 + xL x

3 15

 

840

7560

1 330 560

Practica6_Interpolacion.nb

7

In[32]:=

Expand @%D

569 683 x

553 x 2

9133 x 3

73 x 4

1079 x 5

Out[32]=

 

+

443 520

4752

133 056

4752

1 330 560

Visualizamos resultados

In[33]:= grafpuntos = ListPlot@ puntos, PlotStyle → PointSize@ 0.02D , DisplayFunction → IdentityD; grafpoli =
In[33]:=
grafpuntos = ListPlot@ puntos, PlotStyle → PointSize@ 0.02D , DisplayFunction → IdentityD;
grafpoli = Plot@ p @x D, 8 x, − 0.5, 11.5<, DisplayFunction → IdentityD;
Show@ grafpuntos, grafpoli, DisplayFunction → $DisplayFunctionD
5
4
3
Out[35]=
2
1
2
4
6
8
10

6.3. Interpolación con funciones splines

Sea D una partición del intervalo [a,b],

:a = x 0 < x 1 <

< x n = b.

Un spline es una función polinómica a trozos en cada uno de los intervalos [x i , x i+1 ] de la partición.

Notaremos por S m

intervalos de la partición:

k

HDL al conjunto de funciones de clase k que son polinomios a trozos de grado m en cada uno de los

S

k

n

k

HL = 8s C m

H@a, bDL : s » @x i ,x i+1 D m <,

donde m denota el conjunto de polinomios de grado a lo sumo m.

En lo sucesivo notaremos:

D={x 0 , x 1 ,

, x n } la partición dada por los nodos.

h i = x i+1 - x i , a la amplitud del intervalo [x i , x i+1 ].

f i a los valores de la función que queremos interpolar.

m i = H f i+1 - f i h i , a la pendiente de la curva en el intervalo [x i , x i+1 ].

Interpolación con splines cúbicos: S 3 2 HDL

8

Practica6_Interpolacion.nb

2

Funciones interpolantes: Splines en S 3 HDL. Se trata de funciones de clase 2 definidas a trozos mediante polinomios de grado 3 en cada intervalo de la partición.

2

Problema de interpolación: Determinar un spline s Œ S 3 HDL tal que:

s Hx i L = f i ,

i = 0, 1,

,

n,

y necesitamos imponer además 2 condiciones adicionales en los puntos frontera x 0 y x n . Por ejemplo si el espline satisface s'' Hx 0 L = 0 y s'' Hx n L = 0 se dice que es un spline cúbico natural.

EJEMPLO 4

Calcular el spline cúbico natural que interpola al conjunto de datos :

{(-1,0), (3,1), (5,-3), (7,2)} ,

En este caso el spline será una función de clase 2 definida a trozos, mediante 3 polinomios de tercer grado, que escribiremos en la forma

a 0 + b 0 Hx + 1L + c 0 Hx + 1L 2 + d 0 Hx + 1L 3 ,

x œ @-1, 3L

s HxL =

a 1 + b 1 Hx - 3L + c 1 Hx - 3L 2 + d 1 Hx - 3L 3 ,

x

œ @3, 5L

a 2 + b 2 Hx - 5L + c 2 Hx - 5L 2 + d 2 Hx + 5L 3 ,

x

œ @5, 7D

con las condiciones adicionales: s '' Hx 0 L = s'' Hx n L = 0

Definimos los puntos

In[36]:=

puntos = 881, 0< , 83, 1 <, 8 5, 3 <, 8 7, 2 << ;

Definimos cada uno de los trozos que definen el spline

In[37]:=

s 0 @x _D := a 0 + b 0 Hx + 1L + c 0 Hx + 1L 2 + d 0 Hx + 1L 3 ; s 1 @x _D := a 1 + b 1 Hx 3L + c 1 Hx 3L 2 + d 1 Hx 3L 3 ; s 2 @x _D := a 2 + b 2 Hx 5L + c 2 Hx 5L 2 + d 2 Hx 5L 3

Imponemos las condiciones de interpolación

In[40]:=

ecu1 = s 0 @1D 0

Out[40]=

a 0 0

In[41]:=

ecu2 = s 1 @3 D 1

Out[41]=

a 1 1

Practica6_Interpolacion.nb

9

In[42]:=

ecu3 = s 2 @5 D 3

Out[42]=

a 2 3

In[43]:=

ecu4 = s 2 @7 D 2

Out[43]=

a 2 + 2b 2 + 4c 2 + 8d 2 2

Imponemos las condiciones de continuidad (en nodos interiores)

In[44]:=

ecu5 = s 0 @3 D s 1 @3 D

Out[44]=

a 0 + 4b 0 + 16 c 0 + 64 d 0 a 1

In[45]:=

ecu6 = s 1 @5 D s 2 @5 D

Out[45]=

a 1 + 2b 1 + 4c 1 + 8d 1 a 2

Imponemos las condiciones de derivabilidad: clase 1 (en nodos interiores)

In[46]:=

ecu7 = s 0 '@3 D s 1 '@3 D

Out[46]=

b 0 + 8c 0 + 48 d 0 b 1

In[47]:=

ecu8 = s 1 '@5 D s 2 '@5 D

Out[47]=

b 1 + 4c 1 + 12 d 1 b 2

Imponemos las condiciones de derivabilidad: clase 2 (en nodos interiores)

In[48]:=

ecu9 = s 0 ''@ 3D s 1 ''@3 D

Out[48]=

2c 0 + 24 d 0 2c 1

In[49]:=

ecu10 = s 1 ''@5 D s 2 ''@ 5D

Out[49]=

2c 1 + 12 d 1 2c 2

10

Practica6_Interpolacion.nb

Imponemos la condición en la frontera s''(-1)=s''(7)=0

In[50]:=

ecu11 = s 0 ''@1D 0

Out[50]=

2c 0 0

In[51]:=

ecu12 = s 2 ''@7 D 0

Out[51]=

2c 2 + 12 d 2 0

Resolvemos el sistema formado por todas las ecuaciones

In[52]:=

Out[52]=

coeficientes = Solve@8 ecu1, ecu2, ecu3, ecu4, ecu5, ecu6, ecu7, ecu8, ecu9, ecu10, ecu11, ecu12<D

81 27 ::a 0 → 0, a 1 → 1, a 2 → −3, c
81
27
::a 0 → 0, a 1 → 1, a 2 → −3, c 0 → 0, c 1 → −
92 ,d 0 → − 368 ,
131
193 351
171
1 117
b 0 →
>>
92 ,b 1 → − 92 ,c 2 → 184 ,d 1 → 368 ,b 2 → − 23 ,d 2 → − 368

Sustituimos los coeficientes en las expresiones de s 0 H x L, s 1 H x L y s 2 H x L

In[53]:=

Out[53]=

In[54]:=

Out[54]=

In[55]:=

Out[55]=

sp0@x _D = s 0 @x D ê. coeficientes@@ 1DD

131 H1 + xL

27

 

368 H1 + xL 3

92

sp1@x _D = s 1 @x D ê. coeficientes@@ 1DD

1

193

H3 + xL

81

H3 + xL 2 +

171

H3 + xL 3

92

92

368

sp2@x _D = s 2 @x D ê. coeficientes@@ 1DD

3 +

5 x

+

351 184 H5 + xL 2

117

H5 + xL 3

23

368

Nuestra función spline vendrá dada por

In[56]:=

s@x _D : = Which@1 x < 3, sp0@ xD, 3 x <

5, sp1@ xD, 5 x 7, sp2@ xDD

Visualizamos los resultados

Practica6_Interpolacion.nb

11

In[57]:= grafpuntos = ListPlot@ puntos, PlotStyle → PointSize@0.02`D, DisplayFunction → IdentityD; grafspline =
In[57]:=
grafpuntos =
ListPlot@ puntos, PlotStyle → PointSize@0.02`D, DisplayFunction → IdentityD;
grafspline = Plot@s@ xD , 8x, − 1, 7<, DisplayFunction → IdentityD;
Show@ grafpuntos, grafspline, DisplayFunction → $DisplayFunctionD
2
1
Out[59]=
2
4
6
-1
-2
-3

Ejercicios propuestos

EJERCICIO 1.- Calcular usando el método de Newton (diferencias divididas) el polinomio p(x) que interpola a la función f(x)=ln(x) en los puntos que resulta de dividir [1,4] en 6 partes iguales.

EJERCICIO 2.- Los datos correspondientes al censo de una población (en miles de habitantes) se recogen en la siguiente tabla:

Año

1950

1960

1970

1980

1990

2000

Número habitantes 123.5 131.2 150.7 141.3 203.2 240.5

a) Utilizar interpolación polinómica para estimar el número de habitantes en el año

1965.

b) ¿Cuál será la población estimada para el año 2020?. Comentar el resultado

obtenido.

12

Practica6_Interpolacion.nb

EJERCICIO 3.- Aproximar el perfil superior del pato de la imagen interpolando en los 21 puntos señalados mediante:

imagen interpolando en los 21 puntos señalados mediante: a) Un polinomio b) Un spline cúbico natural

a) Un polinomio

b) Un spline cúbico natural

c) ¿Qué función proporciona un resultado más satisfactorio?