Polinomio interpolador

Anuncio
Cálculo científico y técnico con
HP49g/49g+/48gII/50g
Módulo 3: Aplicaciones
Tema 3.7 Polinomio interpolador
Francisco Palacios
Escuela Politécnica Superior de Ingeniería Manresa
Universidad Politécnica de Catalunya
Dep. Matemática Aplicada III
Abril 2008, versión 1.3
1
Introducción
1.1
Polinomio interpolador
En la interpolación polinomial, partimos de n + 1 puntos dados
(x0 , y0 ), (x1 , y1 ), . . . , (xn , yn ),
y nuestro objetivo consiste en encontrar un polinomio de grado ≤ n
P (x) = a0 + a1 x + a2 x2 + · · · + an xn
que pase por los puntos, esto es, que cumpla las n + 1 condiciones:
P (xj ) = yj ,
j = 0, 1, . . . , n.
Si los valores xj son distintos, entonces se puede garantizar que existe un
único polinomio de grado ≤ n que cumple las condiciones fijadas.
Podemos usar el polinomio interpolador para aproximar el valor de y en posiciones intermedias de x dentro del intervalo de interpolación1 [min xj , max xj ].
Ejemplo 1.1 Polinomio interpolador de la tabla
x
y
1.0
1.25
1.5
2.56
1
2.0
4.28
3.5
3.14
Si los valores xj están ordenados de forma creciente, esto es, x0 < x1 < · · · < xn ,
entonces el intervalo de iterpolación es [x0 , xn ]
1
Como tenemos 4 pares de datos (xj , yj ), el problema consiste en determinar
un polinomio de grado ≤ 3
P (x) = a0 + a1 x + a2 x2 + a3 x3 .
Para ello hemos de calcular los valores de los coeficientes aj para los que
se cumplen las condiciones P (xj ) = yj . Existen varios métodos disponibles
para determinar los coeficientes. Empleando cualquiera de ellos, se obtiene
el polinomio
P (x) = −1.168x3 − 6.076x2 + 7.022x − 3.364 ¤
Actividad 1.1 Comprueba que el polinomio del ejemplo anterior interpola
los valores de la tabla, es decir, que verifica P (xj ) = yj para los valores de
la tabla. Usando el polinomio interpolador, aproxima el valor de y(1.55).
(Sol. y(1.55) = 2.728)
1.2
Matriz de Vandermonde
Podemos obtener el polinomio interpolador resolviendo un sistema de ecuaciones lineales2 . Consideremos n + 1 puntos
(x0 , y0 ), (x1 , y1 ), . . . , (xn , yn )
con abscisas distintas, y sea
P (x) = a0 + a1 x + a2 x2 + · · · + an xn
el polinomio interpolador. Imponiendo las n + 1 condiciones
P (xj ) = yj ,
j = 0, 1, . . . , n,
resulta un sistema de n + 1 ecuaciones lineales en las n + 1 incógnitas
a0 , a1 , . . . , an ,
⎧
a0 + a1 x0 + a2 x20 + · · · + an xn0 = y0 ,
⎪
⎪
⎪
⎨ a + a x + a x2 + · · · + a xn = y ,
0
1 1
2 1
n 1
1
..
⎪
⎪
.
⎪
⎩
2
a0 + a1 xn + a2 xn + · · · + an xnn = yn .
El sistema puede escribirse matricialmente
⎛
⎞⎛
1 x0 x20 · · · xn0
⎜ 1 x1 x2 · · · xn ⎟ ⎜
1
1 ⎟⎜
⎜
⎜ .. ..
.. . .
.. ⎟ ⎜
⎝ . .
. . ⎠⎝
.
1 xn x2n · · · xnn
2
en la forma
⎞ ⎛
a0
y0
⎜ y1
a1 ⎟
⎟ ⎜
.. ⎟ = ⎜ ..
. ⎠ ⎝ .
an
yn
⎞
⎟
⎟
⎟.
⎠
Esta es una forma teóricamente muy clara, aunque desde el punto de vista práctico,
son preferibles los métodos directos como el interpolador de Newton o de Lagrange.
2
La matriz de coeficientes del sistema se denomina matriz de Vandermonde
asociada a los puntos x0 , x1 , . . . , xn . Se trata de una matriz cuadrada de
orden n + 1 con la siguiente estructura
⎞
⎛
1 x0 x20 · · · xn0
⎜ 1 x1 x2 · · · xn ⎟
1
1 ⎟
⎜
V (x0 , x1 , . . . , xn ) = ⎜ . .
.. . .
.. ⎟ .
.
.
⎝ . .
. . ⎠
.
1 xn x2n · · · xnn
Ejemplo 1.2 Matriz de Vandermonde.
Consideremos la tabla de valores
x
y
−1
1
1/2
2
1
0
2
3
La matriz de Vandermonde correspondiente a las abscisas
x0 = −1,
es
x1 = 1/2,
x2 = 1,
x3 = 2
⎛
⎞
1 −1
1
−1
⎜ 1 1/2 1/4 1/8 ⎟
⎟.
V =⎜
⎝ 1 1
1
1 ⎠
1 2
4
8
El polinomio interpolador de la tabla es un polinomio de grado ≤ 3
P (x) = a0 + a1 x + a2 x2 + a3 x3 .
Los coeficientes aj pueden obtenerse resolviendo el sistema
⎞ ⎛ ⎞
⎛
⎞⎛
1
1 −1
1
−1
a0
⎜ 1 1/2 1/4 1/8 ⎟ ⎜ a1 ⎟ ⎜ 2 ⎟
⎟=⎜ ⎟
⎜
⎟⎜
⎝ 1 1
1
1 ⎠ ⎝ a2 ⎠ ⎝ 0 ⎠
3
a3
1 2
4
8
Como solución obtenemos
a0 = 4,
a1 = −17/6,
a2 = −7/2,
a3 = 7/3.
El polinomio interpolador es, por tanto
P (x) = 4 −
7
7
17
x − x2 + x3
6
2
3
2
Actividad 1.2 Verifica que el polinomio obtenido en el Ejemplo 1.2, interpola la tabla
x −1 1/2 1 2
y
1
2
0 3
Aproxima el valor de y(1.5). (Sol. y(1.5) ' P (1.5) = −0. 25)
3
Actividad 1.3 Representa el polinomio
P (x) = 4 −
7
7
17
x − x2 + x3
6
2
3
en el intervalo x ∈ [−1.1, 2.1]. Verifica gráficamente que el polinomio pasa
por los puntos de la tabla.
2
Resolución con la calculadora
2.1
Comando LAGRANGE
El comando LAGRANGE calcula el polinomio interpolador de una tabla
de valores. Puedes encontrarlo en el catálogo [CAT], o bien, en la segunda
página del menú de herramientas para polinomios3 [ARITH][POLY]. El funcionamiento del comando es muy simple, cargamos en el nivel 1 de la pila
una matriz con los puntos
¶
µ
x0 x1 · · · xn
y0 y1 · · · yn
y, al ejecutar el comando LAGRANGE, se obtiene el polinomio interpolador.
Por ejemplo, para determinar el interpolador de la tabla
x
y
−1
1
1/2
2
1
0
2
3
Construimos la matriz indicada, con los valores xj en la primera fila y los
valores yj en la segunda
Pulsamos [F6] para ejecutar el comando LAGRANGE, y se obtiene
3
Para acceder a [ARITH] pulsa Á[1].
4
Resultado que coincide con el obtenido en el Ejemplo 1.2. Para reescribir el
polinomio en un formato más habitual, usamos el comando DISTRIB, que
aplica la propiedad distributiva del producto respecto de la suma. Encontraremos el comando en el Catalogo o en [CNVRT][REWRITE]4 . Después
de ejecutar varias veces el comando DISTRIB, obtenemos
Si pulsamos [F2] para ejecutar [EXPLN], obtenemos el polinomio en la forma
Actividad 2.1 A partir de los datos de la tabla
x
y
1
1
1/2
−1
3
0
4
4
aproxima el valor de y(1.5) usando interpolación cúbica5 .
(Sol. y(1.5) ' 1.3929)
Actividad 2.2 A partir de los datos de la tabla
x
y
1.5
1.12
2.0
1.34
2.5
1.56
3.0
1.41
Aproxima los valores y(1.73), y(2.65), usando interpolación cuadrática, es
decir, un polinomio interpolador de grado 2. Para ello, en cada caso, escoge
los tres puntos cuyas abscisas están más próximas de valor de x considerado.
(Sol. Para x = 1.73, construimos el polinomio de grado dos con los puntos de
abscisas 1.5, 2.0 y 2.5. Se obtiene y(1.73) ' 1.22. Para x = 1.73, obtenemos
y(2.56) ' 1.56)
Para acceder al menú de conversiones [CNVRT] pulsa Á[6]
La interpolación con 4 puntos se denomina interpolación cúbica. De forma análoga,
la interpolación con 3 puntos se denomina cuadrática y la interpolación con dos puntos
lineal.
4
5
5
Ejemplo 2.1 Aproximación del valor de una integral usando un polinomio
interpolador.
Consideramos la integral
Z
1
0.5
sin x
dx.
x
Es bien conocido que la función f (x) = sin(x)/x no es la derivada de ninguna
combinación simple de funciones elementales. Para aproximar el valor de la
integral, determinamos abscisas igualmente espaciadas en el intervalo [0.5, 1]
con una separación h = 0.1, y calculamos el valor del integrando f (x), esto
es
x
f (x)
0.5
0.95885
0.6
0.94107
0.7
0.92031
0.8
0.89669
0.9
0.87036
1.0
0.84147
Ahora podemos calcular el polinomio interpolador P (x) de la tabla, que será
de grado≤ 5 y usarlo para aproximar el valor de la integral
Z 1
Z 1
sin x
dx '
P (x) dx.
0.5 x
0.5
Veamos cómo hacerlo con la calculadora. El procedimiento que se explica a
continuación nos permite construir la matriz de puntos sin entrar los datos
manualmente.
1. Fijamos el modo angular en radianes y el formato decimal en FIX 5.
2. Accede al editor de matrices6 [MATRW]. Si es necesario, pulsa [F2] y
[F5] para activar el modo de entrada de vectores y el modo de desplazamiento horizontal.
Construye un vector con las abscisas y pulsa ENTER para cargarlo en
el Nivel 1 de la pila.
6
Tecla Á(4,3).
6
3. Ahora vamos a construir el vector con las imágenes. Define7 la función
f (x) = sin(x)/x,
y duplica el vector de abscisas.
4. No se puede aplicar directamente una función sobre un vector o una
matriz, pero comando MAP permite aplicar cualquier programa a los
elementos de una matriz o un vector. Carga en el Nivel 1 de la pila el
siguiente programa.
Busca el comando MAP en el catálogo8
7
8
Por ejemplo, usando el comando DEFINE.
También puedes teclearlo directamente.
7
y pulsa [F6] o ENTER para ejecutarlo, obtendrás
5. Ahora tenemos que crear un vector a partir de los dos vectores de la
pila. Para ello, ejecuta el comando AUGMENT que podemos encontrar en [MTRCES][CREAT]. Este comando, forma una matriz a partir
de dos bloques, el resultado es una matriz de 2 filas y 6 columnas
6. Ahora puedes ejecutar el comando LAGRANGE y obtener el polinomio interpolador.
8
7. Vamos a calcular la integral del polinomio. Pulsa [H] para acceder al
editor de ecuaciones y calculamos la integral del polinomio obtenido
entre x = 0.5 y x = 1.
8. Como resultado, obtendrás 0.45298.
Veamos ahora cual es el valor de la integral. Fija el modo numérico9 FIX 7
y accede al editor de ecuaciones [EQW] para escribir la integral.
Pulsa ENTER para cargar la integral en la pila y →NUM para calcular una
evaluación decimal. Como resultado, obtendrás
Actividad 2.3 Aproxima el valor de la integral
Z 1.5
sin x
dx
x
1
siguiendo el modelo del ejemplo precedente. Toma las abscisas espaciadas
con paso h = 0.1. (Sol. Valor aproximado integrando el polinomio interpolador 0.37860)
9
El número de decimales fijado en MODES, determina la precisión del método de
integración numérica de la calculadora.
9
Actividad 2.4 Para obtener n + 1 puntos igualmente espaciados en un
intervalo [a, b], tomamos el paso h = (b − a)/n y los puntos xj = a + jh.
Determina el paso para obtener 5 puntos igualmente espaciados en [0.5, 1].
Con los 5 valores de xj obtenidos, determina un polinomio (de grado≤ 4)
que interpole la función
f (x) = sin(x ln x).
¿Qué error se comete cuando aproximas f (0.67) usando el polinomio?¿Y
cuando aproximas f (0.75)?
(Sol. Para obtener 5 abscisas es n = 4, luego h = 0.125. Las abscisas son
x0 = 0.5, x1 = 0.625, x2 = 0.75, x4 = 0.875, x5 = 1. El valor del interpolador
en x = 0.75 es P (0.67) = 0.265124. error = f (0.67) − P (0.67) = 0.000012.
En x = 0.75 el error es nulo, es una de las abscisas de interpolación.)
2.2
Matriz de Vandermonde
El comando VANDERMONDE nos proporciona la matriz de Vandermonde
a partir del vector de abscisas [x0 , x1 , . . . , xn ]. Podemos encontrarlo en el
Catálogo o bien en la tercera página del menú de herramientas para construir matrices [MATRICES][CREAT]. Veamos, por ejemplo, la matriz de
Vandermonde correspondiente a las abscisas
x0 = −1, x1 = 1/2, x2 = 1/3, x3 = 2.
Cargamos en la pila el vector de abscisas
y pulsamos [F5] para ejecutar el comando VANDERMONDE,
10
Vemos que las potencias aparecen sin efectuar, si pulsamos [→NUM], obtendremos una evaluación numérica de los elementos de la matriz. Para obtener
una evaluación simbólica, cargamos en la pila el programa << EVAL >> y
ejecutamos el comando MAP del Catálogo
Ejemplo 2.2 Obtención del polinomio interpolador usando la matriz de
Vandermonde.
Consideremos la tabla
x
y
1.5
1.12
2.0
1.34
2.5
1.56
3.0
1.41
El polinomio interpolador es de grado ≤ 3. Sabemos que los coeficientes del
polinomio interpolador pueden calcularse resolviendo el sistema
⎞ ⎛
⎞
⎛
1.12
a0
⎜ a1 ⎟ ⎜ 1.34 ⎟
⎟ ⎜
⎟
V⎜
⎝ a2 ⎠ = ⎝ 1.56 ⎠
1.41
a2
donde V es la matriz de Vandermonde correspondiente al vector de abscisas
[1.5, 2.0, 2.5, 3.0]. Si escribimos el sistema en la forma V a = y, entonces el
vector de coeficientes puede calcularse como10 a = V −1 y.
1. Carga el vector de abscisas en la pila
10
En general, calcular el polinomio interpolador invirtiendo la matriz de Vandermonde
no es una buena estrategia. En primer lugar, el cálculo de la inversa es costoso, por otra
parte, la matriz de Vandermonde es un caso de matriz mal condicionada y eso significa
que en el cálculo de su inversa pueden generarse importantes errores numéricos.
11
y ejecuta el comando VANDERMONDE.
2. Pulsa [1/x] para calcular V −1
3. Finalmente, carga en la pila un vector con los valores yj
y pulsa [×] para calcular V −1 y
El polinomio interpolador es
P (x) = 4.16 − 5.357x + 2.960x2 − 0.493x3
12
¤
Actividad 2.5 Calcula el polinomio interpolador del ejemplo anterior usando el comando LAGRANGE.
Actividad 2.6 Calcula el polinomio interpolador de la tabla
x
y
1.5
1.12
2.0
1.34
2.5
1.56
3.0
1.41
usando la matriz de Vandermonde. Verifica el resultado usando el comando
LAGRANGE.
Actividad 2.7 Si interpolamos una tabla de 4 puntos, ¿es posible que obtengamos un polinomio de grado 2?¿Y de grado 1? ¿Qué condición debe
cumplirse para que ésto pase?
13
Descargar