Vous êtes sur la page 1sur 12

Prctica 6

INTERPOLACIN
6.1. Interpolacin Polinmica
Datos de interpolacin: 8Hx
k
, f
k
L<
k=0,1,...,n
Conocemos los valores de una funcin, f
k
= f Hx
k
L, en n +1 puntos distintos, x
k
, de un intervalo [a,b]
Funciones interpolantes: Polinomios de grado menor o igual que n
p HxL = a
0
+ a
1
x + a
2
x
2
+ . . . + a
n
x
n
Problema de interpolacin: Determinar los coeficientes a
0
, a
1
, ... , a
n
para que se cumplan las
condiciones de interpolacin:
p Hx
k
L = f
k
, k = 0, 1, . . . , n
Mtodo de Lagrange
Consiste en calcular previamente los polinomios L
i
HxL, i =0, 1, . . . , n, llamados polinomio de Lagrange o funciones
cardinales de Lagrange, que verifican:
L
i
Hx
i
L = 1, L
i
Ix
j
M = 0, i j
Estos polinomios vienen dados por la expresin
L
i
HxL =
j =0
j i
n
x x
j
x
i
x
j
El polinomio de interpolacin se escribe entonces en la forma
p HxL = f
0
L
0
HxL + f
1
L
1
HxL + . . . + f
n
L
n
HxL =
i =0
n
f
i
L
i
HxL
EJEMPLO 1
Calcular el polinomio que interpola al conjunto de datos
{(-1,2),(2,8),(5,-3), (8,10)}
Definimos los puntos
In[1]:= puntos := 881, 2<, 82, 8<, 85, 3<, 88, 10<<
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
In[4]:= L
0
@x_D =
Hx x
1
L Hx x
2
L Hx x
3
L
Hx
0
x
1
L Hx
0
x
2
L Hx
0
x
3
L
Out[4]=
1
162
H8 + xL H5 + xL H2 + xL
In[5]:= L
1
@x_D =
Hx x
0
L Hx x
2
L Hx x
3
L
Hx
1
x
0
L Hx
1
x
2
L Hx
1
x
3
L
Out[5]=
1
54
H8 + xL H5 + xL H1 + xL
In[6]:= L
2
@x_D =
Hx x
0
L Hx x
1
L Hx x
3
L
Hx
2
x
0
L Hx
2
x
1
L Hx
2
x
3
L
Out[6]=
1
54
H8 + xL H2 + xL H1 + xL
In[7]:= L
3
@x_D =
Hx x
0
L Hx x
1
L Hx x
2
L
Hx
3
x
0
L Hx
3
x
1
L Hx
3
x
2
L
Out[7]=
1
162
H5 + xL H2 + xL H1 + xL
Clculo del polinomio de inteprolacin
In[8]:= polisolu = f
0
L
0
@xD + f
1
L
1
@xD + f
2
L
2
@xD + f
3
L
3
@xD
Out[8]=
1
81
H8 + xL H5 + xL H2 + xL +
4
27
H8 + xL H5 + xL H1 + xL +
1
18
H8 + xL H2 + xL H1 + xL +
5
81
H5 + xL H2 + xL H1 + xL
2 Practica6_Interpolacion.nb
In[9]:= Expand@polisoluD
Out[9]=
682
81
+
100 x
27

133 x
2
54
+
41 x
3
162
Visualizacin 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]=
2 4 6 8
5
10
Mtodo de Newton (Diferencias divididas)
Consiste en escribir el polinomio de interpolacin en la forma:
p HxL = 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 . . . Hx x
n1
L
Los coeficientes A
k
, quesedenominandiferenciasdivididasdelafuncin f enlospuntosx
0
, x
1
, ... x
k
, sedenotanpor A
k
= f
[x
0
, x
1
, ... x
k
] y se generan de forma recursiva mediante la frmula
f @x
0
, x
1
, . . . x
k
D =
f @x
1
, x
2
, . . . x
k
D f @x
0
, x
1
, . . . x
k1
D
Hx
k
x
0
L
, k = 1, 2, . . . , n
partiendo de f[x
0
]=f(x
0
).
Con esta notacin, el polinomio de interpolacin puede escribirse como
p HxL = f @x
0
D + f @x
0,
x
1
D Hx x
0
L + f @x
0,
x
1
, x
2
D Hx x
0
L Hx x
1
L + . . . +
f @x
0,
x
1
, . . . , x
n
D Hx x
0
L Hx x
1
L . . . Hx x
n1
L.
EJEMPLO 2
Calcular el polinomio que interpola al conjunto de datos
8H5, 1L, H3, 2L, H2, 10L, H3, 2L, H6, 0L, H8, 3L<
Practica6_Interpolacion.nb 3
Entrada de datos
In[13]:= puntos = 885, 1<, 83, 2<, 82, 10<, 83, 2<, 86, 0<, 88, 3<<;
Determinamos los nodos y los valores de la funcin
In[14]:= n = Length@puntosD 1;
For@i = 0, i n, i++, x
i
= puntos@@i + 1, 1DD; f
i
= puntos@@i + 1, 2DDD
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@dD;
dif = Array@d, 82 n + 2, n + 2<, 1D;
A continuacin 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 interpolacin y ponemos de
cabecera el texto x
k
y f
k
en la posicin (-1,-1) y (-1,0) , respectivamente.
In[19]:= d@1, 1D = "x
k
"; d@1, 0D = "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
f
k
5 1
3 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++, ForBi = j, i 2 n j, i = i + 2,
d@i, jD =
d@i + 1, j 1D d@i 1, j 1D
d@i + j, 1D d@i j, 1D
FF
4 Practica6_Interpolacion.nb
Visualizamos el resultado final
In[22]:= dif MatrixForm
Out[22]//MatrixForm=
x
k
f
k
5 1
1
2
3 2
11
70
8
5

123
560
2 10
8
5
9089
166320
8
103
270

19897
2162160
3 2
11
6

193
2970

2
3

1
3
6 0
1
6

3
2
8 3
Calculamos el polinomio de interpolacin
In[23]:= polisolu =
k=0
n
d@k, kD
j=0
k1
Ix x
j
M
Out[23]= 1 +
5 + x
2
+
11
70
H3 + xL H5 + xL
123
560
H2 + xL H3 + xL H5 + xL +
9089 H3 + xL H2 + xL H3 + xL H5 + xL
166320

19897 H6 + xL H3 + xL H2 + xL H3 + xL H5 + xL
2162160
In[24]:= Expand@polisoluD
Out[24]=
67069
3003

109171 x
60060

810709 x
2
270270
+
615757 x
3
2162160
+
2021 x
4
24570

19897 x
5
2162160
Visualizamos el resultado (en las variables xmin y xmax, guardamos el valor mnimo y mximo de los nodos)
Practica6_Interpolacion.nb 5
In[25]:= xmin = Min@Table@x
i
, 8i, 0, n<DD;
xmax = Max@Table@x
i
, 8i, 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
Out[29]=
-4 -2 2 4 6 8
-5
5
10
15
20
6.2. Interpolacin polinmica con Mathematica
El programa Mathematica puede calcular directamente el polinomio de interpolacin mediante la instruccin:
InterpolatingPolynomial[puntos, variable]
Calcula el polinomio de interpolacin en la variable especificada para el conjunto de puntos dados en la forma:
puntos=88x
0
, f
0
<, 8x
1
, f
1
<, ..., 8x
n
, f
n
<<.
EJEMPLO 3
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<, 87, 3<, 89, 5<, 811, 3<<
Calculamos el polinomio
In[31]:= p@x_D = InterpolatingPolynomial@puntos, xD
Out[31]=
2
3
+
2
15
+
31
840
+
31
7560

1079 H9 + xL
1330560
H7 + xL H5 + xL H3 + xL x
6 Practica6_Interpolacion.nb
In[32]:= Expand@%D
Out[32]=
569683 x
443520

553 x
2
4752

9133 x
3
133056
+
73 x
4
4752

1079 x
5
1330560
Visualizamos resultados
In[33]:= grafpuntos = ListPlot@puntos, PlotStyle PointSize@0.02D, DisplayFunction IdentityD;
grafpoli = Plot@p@xD, 8x, 0.5, 11.5<, DisplayFunction IdentityD;
Show@grafpuntos, grafpoli, DisplayFunction $DisplayFunctionD
Out[35]=
2 4 6 8 10
1
2
3
4
5
6.3. Interpolacin con funciones splines
Sea D una particin del intervalo [a,b],
: a = x
0
< x
1
< . . . < x
n
= b.
Un spline es una funcin polinmica a trozos en cada uno de los intervalos [x
i
, x
i+1
] de la particin.
Notaremos por S
m
k
HDL al conjunto de funciones de clase k que son polinomios a trozos de grado m en cada uno de los
intervalos de la particin:
S
n
k
HL = 8s C
m
k
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 particin 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 funcin que queremos interpolar.
m
i
= H f
i+1
- f
i
L h
i
, a la pendiente de la curva en el intervalo [x
i
, x
i+1
].
Interpolacin con splines cbicos: S
3
2
HDL
Practica6_Interpolacion.nb 7
Funciones interpolantes: Splines en S
3
2
HDL. Se trata de funciones de clase 2 definidas a trozos
mediante polinomios de grado 3 en cada intervalo de la particin.
Problema de interpolacin: Determinar un spline s S
3
2
HDL tal que:
sHx
i
L = f
i
, i = 0, 1, ..., n,
ynecesitamosimponeradems2condicionesadicionalesenlospuntos fronterax
0
y
x
n
. Porejemplosi el esplinesatisface s''Hx
0
L = 0 ys'' Hx
n
L = 0sedicequeesunsplinecbiconatural.
EJEMPLO 4
Calcularel splinecbiconatural queinterpolaal conjuntodedatos:
{(-1,0), (3,1), (5,-3), (7,2)} ,
En este caso el spline ser una funcin de clase 2 definida a trozos, mediante 3 polinomios de tercer grado, que escribiremos
en la forma
sHxL =
a
0
+b
0
Hx+1L + c
0
Hx+1L
2
+d
0
Hx+ 1L
3
, x @-1, 3L
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<, 85, 3<, 87, 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 interpolacin
In[40]:= ecu1 = s
0
@1D 0
Out[40]= a
0
0
In[41]:= ecu2 = s
1
@3D 1
Out[41]= a
1
1
8 Practica6_Interpolacion.nb
In[42]:= ecu3 = s
2
@5D 3
Out[42]= a
2
3
In[43]:= ecu4 = s
2
@7D 2
Out[43]= a
2
+ 2 b
2
+ 4 c
2
+ 8 d
2
2
Imponemos las condiciones de continuidad (en nodos interiores)
In[44]:= ecu5 = s
0
@3D s
1
@3D
Out[44]= a
0
+ 4 b
0
+ 16 c
0
+ 64 d
0
a
1
In[45]:= ecu6 = s
1
@5D s
2
@5D
Out[45]= a
1
+ 2 b
1
+ 4 c
1
+ 8 d
1
a
2
Imponemos las condiciones de derivabilidad: clase 1 (en nodos interiores)
In[46]:= ecu7 = s
0
'@3D s
1
'@3D
Out[46]= b
0
+ 8 c
0
+ 48 d
0
b
1
In[47]:= ecu8 = s
1
'@5D s
2
'@5D
Out[47]= b
1
+ 4 c
1
+ 12 d
1
b
2
Imponemos las condiciones de derivabilidad: clase 2 (en nodos interiores)
In[48]:= ecu9 = s
0
''@3D s
1
''@3D
Out[48]= 2 c
0
+ 24 d
0
2 c
1
In[49]:= ecu10 = s
1
''@5D s
2
''@5D
Out[49]= 2 c
1
+ 12 d
1
2 c
2
Practica6_Interpolacion.nb 9
Imponemos la condicin en la frontera s''(-1)=s''(7)=0
In[50]:= ecu11 = s
0
''@1D 0
Out[50]= 2 c
0
0
In[51]:= ecu12 = s
2
''@7D 0
Out[51]= 2 c
2
+ 12 d
2
0
Resolvemos el sistema formado por todas las ecuaciones
In[52]:= coeficientes =
Solve@8ecu1, ecu2, ecu3, ecu4, ecu5, ecu6, ecu7, ecu8, ecu9, ecu10, ecu11, ecu12<D
Out[52]= ::a
0
0, a
1
1, a
2
3, c
0
0, c
1

81
92
, d
0

27
368
,
b
0

131
92
, b
1

193
92
, c
2

351
184
, d
1

171
368
, b
2

1
23
, d
2

117
368
>>
Sustituimos los coeficientes en las expresiones de s
0
HxL, s
1
HxL y s
2
HxL
In[53]:= sp0@x_D = s
0
@xD . coeficientes@@1DD
Out[53]=
131 H1 + xL
92

27
368
H1 + xL
3
In[54]:= sp1@x_D = s
1
@xD . coeficientes@@1DD
Out[54]= 1
193
92
H3 + xL
81
92
H3 + xL
2
+
171
368
H3 + xL
3
In[55]:= sp2@x_D = s
2
@xD . coeficientes@@1DD
Out[55]= 3 +
5 x
23
+
351
184
H5 + xL
2

117
368
H5 + xL
3
Nuestra funcin 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
10 Practica6_Interpolacion.nb
Visualizamos los resultados
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
Out[59]= 2 4 6
-3
-2
-1
1
2
Ejercicios propuestos
EJERCICIO 1.- Calcular usando el mtodo de Newton
(diferencias divididas) el polinomio p(x) que interpola a la
funcin 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
poblacin (en miles de habitantes) se recogen en la
siguiente tabla:
Ao 1950 1960 1970 1980 1990 2000
Nmero habitantes 123.5 131.2 150.7 141.3 203.2 240.5
a) Utilizar interpolacin polinmica para estimar el nmero de habitantes en el ao
1965.
b) Cul ser la poblacin estimada para el ao 2020?. Comentar el resultado
obtenido.
Practica6_Interpolacion.nb 11
EJERCICIO 3.- Aproximar el perfil superior del pato de la
imagen interpolando en los 21 puntos sealados mediante:
a) Un polinomio
b) Un spline cbico natural
c) Qu funcin proporciona un resultado ms satisfactorio?
12 Practica6_Interpolacion.nb

Vous aimerez peut-être aussi