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