Derivación e integración numéricas Obtención de fórmulas de tipo interpolatorio Para obtener fórmulas de derivación o integración numéricas a partir de la interpolación polinómica necesitamos calcular, en primer lugar, el polinomio de interpolación y después la derivada correspondiente en un punto a o la integral en un intervalo @a, bD. En lo que respecta a la derivación numérica, consideraremos distintos órdenes de derivación. Los datos de interpolación para las fórmulas de derivación numérica serán lagrangianos y para la integración numérica serán lagrangianos y de tipo Hermite. El polinomio interpolador se obtiene, en todos los casos, con la orden InterpolatingPolynomial. ü Obtención de fórmulas de derivación numérica En la derivación numérica, los nodos de la fórmula, es decir los puntos de interpolación de la función f , serán el punto a y puntos a su derecha e izquierda, de la forma a - h, a + h, a + 2 h, etc. La primera fórmula que vamos a obtener es la que utiliza los nodos a y a + h para la derivada primera. Clear@a, h, f, x, datosD datos = 88a, f@aD<, 8a + h, f@a + hD<<; pol = Simplify@InterpolatingPolynomial@datos, xDD; Simplify@∂x pol ê. x → aD Observe cómo se ha expresado la derivada del polinomio respecto de su variable. A continuación vamos a usar los nodos a - h, a y a + h para la derivada primera. datos = 88a − h, f@a − hD<, 8a, f@aD<, 8a + h, f@a + hD<<; pol = Simplify@InterpolatingPolynomial@datos, xDD; Simplify@∂x pol ê. x → aD Es una fórmula con sólo dos nodos (el coeficiente de f HaL vale cero). Por último, para la derivada primera, vamos a obtener una fórmula (que no se suele usar) que utiliza los nodos a, a + h y a + 3 h. datos = 88a, f@aD<, 8a + h, f@a + hD<, 8a + 3 h, f@a + 3 hD<<; pol = Simplify@InterpolatingPolynomial@datos, xDD; Simplify@∂x pol ê. x → aD Ahora vamos a obtener una fórmula para la derivada segunda, concretamente la que usa cinco nodos simétricos, a - 2 h, a - h, a, a + h y a + 2 h datos = Table@8a + i h, f@a + i hD<, 8i, −2, 2<D; pol = Simplify@InterpolatingPolynomial@datos, xDD; Simplify@D@pol, 8x, 2<D ê. x → aD De igual forma se obtendría cualquier otra fórmula. A continuación vamos a analizar el orden de precisión de la última fórmula obtenida. Tenemos que ver hasta qué potencia del tipo xi es exacta. De antemano, para i = 0, 1, 2, 3 y 4 está 314 garantizada la exactitud por ser la fórmula de tipo interpolatorio. Al probar con i = 5 observamos que la fórmula da como resultado 20 a3 , es decir el valor exacto de la derivada. Para i = 6 el valor proporcionado es 30 a4 - 8 h4 , diferente de 30 a4 . Luego el orden de precisión es 5. f@x_D := x5 SimplifyA− 30 f@aD + f@a − 2 hD − 16 f@a − hD − 16 f@a + hD + f@a + 2 hD 12 h2 f@x_D := x6 SimplifyA− 30 f@aD + f@a − 2 hD − 16 f@a − hD − 16 f@a + hD + f@a + 2 hD 12 h2 E E ü Comportamiento del error en las fórmulas de derivación numérica Como es conocido, aunque sea muy simple, toda fórmula de derivación numérica que se obtuvo en el desarrollo teórico es convergente. Los errores tienden a cero cuando h tiende a cero. Sin embargo, en la computación aparecen otros errores que pueden desaconsejar el uso de valores muy pequeños de h si se quiere una buena aproximación. Es lo que ocurre con el eror de cancelación en las fórmulas de derivación numérica. Veámoslo. Vamos a dar el valor de las HaL para valores de h de la forma derivadas numéricas de una función f en el punto a = 2, con la fórmula f Ha+hL−f h -j h = 10 con j ¥ 1.Veremos que llega un momento en el que la derivada numérica deja de converger, con unas oscilaciones no controlables, para después pasar a valer cero, porque el numerador vale cero. Esto último ocurre cuando h es tan pequeño que para el ordenador a + h = h. f@z_D := z − 0.5 1 + z2 n = 20; a = 2.; derivadasnumericas = TableA f@a + 10−j D − f@aD 10−j , 8j, n<E El valor exacto de la derivada de f en 2 es f '@2.D errores = f '@aD − derivadasnumericas Los redondeos (a seis cifras) de la derivada numérica para j = 6, 7, 8 coinciden con el valor exacto. Al principio, a medida que h disminuye el error disminuye, después empieza un comportamiento extraño donde los errores pueden ser muy grandes y finalmente la aproximación que da es cero. Puede cambiar el valor de a y comprobarlo para otros valores y otras funciones. Por ejemplo el comportamiento del error en a = -1 se muestra a continuación: a = −1.; derivadasnumericas = TableA f@a + 10−j D − f@aD 10−j errores = f '@aD − derivadasnumericas , 8j, n<E El error mínimo en valor absoluto se alcanza cuando j = 8; después empieza a aumentar hasta j = 16. A partir de j = 17, el error se hace constante porque la derivada numérica es cero. Cambiamos ahora a una fórmula de mayor precisión y volvemos a calcular las derivadas numéricas y los errores. derivadas2 = TableA f '@aD − derivadas2 1 f@a + 10−j D − f@a − 10−j D 2 10−j , 8j, n<E 315 El comportamiento es similar al de la primera fórmula, sólo que el error de truncamiento es menor. Se consiguen más cifras exactas, once, sin que h tenga que disminuir tanto como antes. Ahora con j = 5 se han conseguido once cifras. Antes el error mínimo se alcanzó con j = 8 y fueron ocho cifras. Nuevamente, si h es muy pequeño vuelven a aparecer errores importantes, y finalmente da cero. ü Integración numérica Vamos a obtener las fórmulas del Trapecio y de Simpson. Clear@a, b, fD pol = Simplify@InterpolatingPolynomial@88a, f@aD<, 8b, f@bD<<, xDD; SimplifyA‡ pol xE b a datos = 98a, f@aD<, 9 E=, 8b, f@bD<=; 2 2 pol = Simplify@InterpolatingPolynomial@datos, xDD; a+b , fA a+b SimplifyA‡ pol xE b a Un método alternativo, pero equivalente, consiste en imponer exactitud. Veámoslo para la fórmula de Simpson. B = TableA‡ xi b x, 8i, 0, 2<E; ia+b z y , bi =, 8i, 0, 2<E; A = TableA9ai , j j z k 2 { sol = Simplify@LinearSolve@A, BDD a i SimplifyAsol.9f@aD, fA a+b 2 E, f@bD=E Por último, vamos a obtener la fórmula del trapecio corregida, es decir, la que usa como datos el valor de la función y el de la derivada en cada extremo. datos = 88a, 8f@aD, f '@aD<<, 8b, 8f@bD, f '@bD<<<; pol = Simplify@InterpolatingPolynomial@datos, xDD; SimplifyA‡ pol xE b a ü Ejemplos de uso de fórmulas compuestas ü Fórmula del rectángulo compuesta. Vamos a aplicar varias fórmulas a la integración en @0, 2D de la función Hx3 − x + 2L x . Su valor exacto, en este caso, se puede obtener con la orden Integrate[función, {variable, límite inferior, límite superior}]. En aprox1 guardamos la aproximación obtenida con la fórmula del rectángulo derecha, en aprox2 guardamos el resultado del trapecio y en aprox3 el de Simpson. En todos los casos el número de subintervalos es el mismo, n = 200. Integrate@Hx3 − x + 2L N@%D x , 8x, 0, 2<D 316 f@x_D := Hx3 − x + 2L x a = 0.; b = 2.; n = 200; b−a h= ; n nod = Table@a + i h, 8i, 0, n<D; aprox1 = h ‚ f@nodPi + 1TD n i=1 error1 = 3. + 3. 2. − aprox1 ü Fórmulas compuestas basadas en las del trapecio y Simpson n i1 y 1 j z z aprox2 = h j j j 2 f@nodP1TD + ‚ f@nodPiTD + 2 f@nodPn + 1TDz z i=2 k { error2 = 3. + 3. aprox3 = 2. − aprox2 n n y i h z j z hj j f@nodP1TD + 2 ‚ f@nodPiTD + 4 ‚ fAnodPiT + E + f@nodPn + 1TDz z j 2 6 k i=2 i=1 { 1 error3 = 3. + 3. 2. − aprox3 Observamos la gran precisión de la fórmula de Simpson, que es una de las más usadas en la práctica. Mathematica y la integración numérica. Mathematica tiene una orden de integración numérica, es NIntegrate, que nos da la respuesta con 6 dígitos, pero podemos recuperar hasta la precisión interna estándar (unas 15 cifras) si lo pedimos a través de WorkingPrecision. NIntegrate@Hx3 − x + 2L x , 8x, 0, 2<, WorkingPrecision → 20D No debe confundir NIntegrate con Integrate. La primera lleva programada una integración numérica y puede aplicarla a cualquier función definida y acotada en un intervalo @a, bD; sin embargo, la segunda requiere que la función tenga una x primitiva, a la que aplica la regla de Barrow. Intente integrar en el intervalo @1, 2D la función x usando ambas órdenes. Ejercicios 1.- Obtenga mediante interpolación en el espacio 2 una fórmula para aproximar f '' HaL del tipo combinación de f Ha - hL, f HaL y f Ha + hL. 2.- Con la fórmula obtenida en el ejercicio 1, halle una tabla de aproximaciones y errores de f1'' H2.5L, siendo f1 HxL = xx , para h = 10-i , i = 1, ..., 5. x +40 3.- Sea f2 HxL = ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ è!!!!!ÅÅÅÅ !! ÅÅÅÅÅ . Calcule una tabla que recoja las derivadas de f2 en xi = 1, 2, ..., 10, utilizando la primera 2 x+ 5 x +7 fórmula de derivación numérica obtenida al inicio de la práctica, con h = 10-3 , y muestre al mismo tiempo el error 317 cometido en cada punto. Repita el ejercicio con la segunda fórmula obtenida para la derivada primera y, finalmente, para la obtenida en el ejercicio 1 (con respecto a la segunda derivada). 4.- Divida el intervalo @1, 2D en 100 partes iguales y aplique las fórmulas del rectángulo, Simpson y trapecio compuestas para aproximar la integral en dicho intervalo de f1 . Compare los resultados obtenidos con los que se calculan mediante el comando NIntegrate. 5.- Repita el ejercico 4 para f2 . 6.- Sea f3 HxL = x15 ex en @0, 2D. Vamos a dividir el intervalo en 10 µ 2n subintervalos, es decir, 10, 20, 40, 80, ....y a aplicar la fórmula de Simpson compuesta hasta que la diferencia entre dos aproximaciones consecutivas (por ejemplo, podrían ser con 20 y 40 subintervalos) sea menor que 10-2 , dando en tal caso por buena la última aproximación obtenida. Programe y calcule dicha aproximación. Compare el resultado con el obtenido mediante el comando NIntegrate y compare ambas aproximaciones con el valor exacto.