Capı́tulo 6 Integración y diferenciación numérica 53 54 6.1 Introducción Introducción En este tema se tratará exclusivamente con funciones reales de variable real. Su objetivo es tratar de obtener numéricamente valores para la derivada de una función en un punto, o para la integral definida en algún intervalo, conociendo los valores de la función sólo en algunos puntos. Obsérvese que, planteado sin ninguna restricción, o con restricciones muy genéricas, este problema no tiene una única solución. Por ejemplo, si sólo establecemos la restricción de que las funciones deben ser contı́nuas (o sea, de clase C 0 ) y pasar por ciertos puntos (x0 , y0 ) . . . (xn , yn ), en la (figura 6.1) se pueden apreciar varias de ellas que cumplen esto, y para las que obviamente, las derivadas en cualquier punto, ası́ como las integrales en cualquier intervalo, difieren. Sin embargo, si nos restringimos a ciertas clases de funciones, como los polinomios de grado n, la función, según se vió en el tema de interpolación, serı́a única. Por todo ello, en la sección de derivación supondremos que para calcular la derivada en un punto dado conocemos los valores de la función en cualesquiera puntos arbitrariamente próximos a éste, e igualmente que para calcular la integral lo haremos de una de las funciones que cumplen las condiciones pedidas, limitándonos a acotar el error cometido. yy1 2 yy04 y3 x0 x1 x2 x3 x4 Figura 6.1: Varias funciones que pasan por una serie de puntos dados En las secciones sucesivas necesitaremos dos teoremas de análisis matemático ya conocidos, pero que se enuncian como recordatorio. Teorema del resto Sea f (x) una función de R en R de clase C n−1 (o sea, contı́nua y con derivadas hasta orden n − 1 contı́nuas) en el intervalo cerrado [x, x + h] y cuya derivada de orden n existe en el intervalo abierto ]x, x + h[. Entonces existe algún punto ξ ∈]x, x + h[ tal que f (x + h) = f (x) + hf 0 (x) + h2 00 hn (n) f (x) + . . . + f (ξ) 2 n! El teorema es de existencia, es decir, dice que tal punto ξ está entre x y x + h, pero no cuál es. En cualquier caso, conociendo los valores mı́nimo y máximo de las derivadas en [x, x + h] el teorema, como veremos después, puede servir para acotar el error cometido en un desarrollo en serie. Propiedad de D’Arboux Sea f (x) contı́nua en el intervalo cerrado [a, b], y supongamos que f (a) ≤ f (b). Entonces, ∀y ∈ ]f (a), f (b)[ existe un punto ξ ∈]a, b[ tal que f (ξ) = y. Es decir, todos los valores comprendidos 55 entre los que la función toma en los dos extremos del intervalo se alcanzan en al menos uno de los puntos interiores del mismo. 6.2 6.2.1 Diferenciación numérica Métodos directos Dada una función f de clase C 1 definida sobre un intervalo [x, x + h], estamos interesados en calcular su derivada f 0 (x) en el punto x. Para ello, partimos de la definición de derivada: f (x + h) − f (x) h→0 h f 0 (x) = lı́m Entonces, podemos tomar un valor h pequeño y hacer una primera estimación del valor de la derivada como f (x + h) − f (x) f 0 (x) ' (6.1) h Sin embargo, esta aproximación no permite acotar el error cometido. No obstante, si recurrimos a desarrollar en serie f alrededor de x hasta orden n-1, con resto de orden n, obtenemos f (x + h) = f (x) + hf 0 (x) + h2 00 hn (n) f (x) + . . . + f (ξ) 2 n! Podemos particularizar a n = 2 y despejar f 0 (x) como f 0 (x) = f (x + h) − f (x) h 00 − f (ξ) h 2 (6.2) Como quiera que, si la derivada segunda existe en ]x, x + h[, el segundo término tiende a 0 al tender h a 0, este término da el error cometido cuando no lo consideramos, es decir, cuando aproximamos usando la ecuación (6.1). Ejemplo: usar la ecuación (6.1) para evaluar la derivada de f (x) = cos(x) en x = tomando h = 0,01, y evaluar luego el error cometido usando la ecuación (6.2). π 4 cos( π4 + 0,01) − cos( π4 ) π f( )' = −0,71063051 4 0,01 0 El término de error será h 00 f (ξ) |= 0,005 | cos(ξ) |≤ 0,005 2 de modo que la cota superior para el error será a = 0,005. Ası́ pues, f 0 ( π4 ) = −0,711 ± 0,005. | Como hemos visto, el término de error es proporcional al tamaño del paso, h. Por ello, deberı́a tomarse un tamaño de paso pequeño. Alternativamente, podemos preguntarnos si existen fórmulas más precisas, que hagan el error proporcional a otras potencias de h. En efecto, si tomamos tres términos del desarrollo en serie de Taylor de f alrededor de x, y además usamos dos valores de h, uno positivo y otro negativo, obtenemos h2 00 f (x) + 2 h2 f (x − h) = f (x) − hf 0 (x) + f 00 (x) − 2 f (x + h) = f (x) + hf 0 (x) + h3 000 f (ξ1 ) 6 h3 000 f (ξ2 ) 6 (6.3) (6.4) 56 Diferenciación numérica Restando dichas ecuaciones, y despejando la derivada se obtiene f 0 (x) = f (x + h) − f (x − h) h2 000 − (f (ξ1 ) + f 000 (ξ2 )) 2h 6 Si ahora suponemos que f es al menos de clase C 3 en el intervalo ]ξ1 , ξ2 [, por la propiedad de 000 000 (ξ ) 2 , con lo que la derivada D’Arboux, existe un punto ξ ∈]ξ1 , ξ2 [ tal que f 000 (ξ) = f (ξ1 )+f 2 queda f (x + h) − f (x − h) h2 000 − f (ξ) (6.5) f 0 (x) = 2h 3 Observemos que el término de error es ahora del orden de h 2 , que si h es pequeña, es menor que h, resultado obtenido en el caso anterior. Por otra parte, es posible también usar ecuaciones similares a la (6.3) para calcular derivadas de orden superior. Por ejemplo, para la segunda, h2 00 f (x) + 2 h2 f (x − h) = f (x) − hf 0 (x) + f 00 (x) − 2 f (x + h) = f (x) + hf 0 (x) + h3 000 f (x) + 6 h3 000 f (x) + 6 h4 IV f (ξ1 ) 24 h4 IV f (ξ2 ) 24 (6.6) (6.7) Sumando ambas ecuaciones, usando de nuevo la propiedad de D’Arboux para la derivada cuarta, y despejando f 00 (x), queda f 00 (x) = f (x + h) − 2f (x) + f (x − h) h2 IV − f (ξ) h2 12 Se deja como ejercicio el cálculo de una expresión similar para la derivada tercera. Nótese que el cálculo de cualquier derivada involucra al valor de la función en puntos x + h ó x − h. Si la función es conocida explı́citamente (p. ej., si tenemos su expresión analı́tica, o un algoritmo seguro para su cálculo) esto es razonable. Pero si la función es el resultado de algún experimento, o debe estimarse por procedimientos que vengan afectados de gran error, no deberı́an usarse las fórmulas anteriores para la estimación de la derivada, dado que las diferencias entre dos cantidades muy próximas que aparecen en los numeradores, ası́ como la división por cantidades muy pequeñas, amplifican los errores. 6.2.2 Extrapolación de Richardson Con este procedimiento trataremos de mejorar las ecuaciones obtenidas anteriormente para conseguir aún más precisión en la estimación de la derivada de f en un punto x. Supongamos que f (x) es de clase C n en [x, x + h]. En tal caso, su desarrollo en serie de Taylor alrededor de x para los puntos x + h y x − h será de la forma f (x + h) = ∞ X hk k=0 f (x − h) = k! f (k) (x) ∞ X (−1)k hk k=0 k! f (k) (x) Extrapolación de Richardson 57 Restando ambas ecuaciones, todos los términos de orden par se cancelan, resultando f (x + h) − f (x − h) = 2hf 0 (x) + 2 2 3 000 h f (x) + h5 f (V ) (x) + . . . 3! 5! de donde, despejando f 0 (x), 1 2 (3) 1 4 (V ) f (x + h) − f (x − h) − h f (x) + h f (x) + . . . f (x) = 2h 3! 5! 0 lo que se puede escribir como L = ϕ(h) + a2 h2 + a4 h4 + a6 h6 + . . . (6.8) (x−h) 1 en la que L = f 0 (x), la función ϕ(h) se define como f (x+h)−f y ak = − (k+1)! f (k+1) (x). 2h Nótese que, debido a su definición, con h en el denominador, ϕ(h) sólo puede evaluarse para valores de h distintos de 0, aunque arbitrariamente próximos. Nótese igualmente que el error si damos ϕ(h) como valor para la derivada depende de términos en potencias de h, siendo el término dominante el correspondiente a h 2 . La ecuación (6.8) da la primera estimación de la derivada usando el método de Richardson, pero se puede continuar para conseguir que el término dominante del error sea aún más pequeño. Para ello, escribamos la ecuación (6.8) evaluándola en h2 , lo que da h2 h4 h + a4 + . . . L = ϕ( ) + a2 2 4 16 (6.9) Restandole ahora a la ecuación (6.9) multiplicada por 4 la ecuación (6.8), obtenemos h h4 h6 3L = 4ϕ( ) − ϕ(h) − 3a4 − 15a6 − ... 2 4 16 de donde podemos despejar la derivada L que buscamos como 1 h4 h6 4 h − 15a6 − ... L = ϕ( ) − ϕ(h) − 3a4 3 2 3 4 16 (6.10) Esto significa que, usando una simple combinación de ϕ(h) y ϕ( h2 ), hemos obtenido una precisión del orden de h4 , frente al orden h2 que habı́amos obtenido usando sólo ϕ(h). Análogamente se puede repetir el proceso tantas veces como se quiera; el siguente paso definirı́a ψ(h) = 34 ϕ( h2 ) − 31 ϕ(h) con lo que la ecuación (6.10) evaluada en h y en h2 queda L = ψ(h) + b4 h4 + b6 h6 + . . . h h4 h6 L = ψ( ) + b4 + b6 + . . . 2 16 64 de donde se puede despejar L, multiplicando la segunda ecuación por 16 y restándole la primera: 16 h 1 h6 L = ψ( ) − ψ(h) − b6 − . . . 15 2 15 20 que es una estimación de f 0 (x) con precisión del orden de h6 . 58 Integración numérica Escogido un valor apropiado, digamos 1, para h, la repetición del proceso lleva a la siguiente fórmula general: D(n, 0) = L + O(h2 ) D(n, 1) = L + O(h4 ) D(n, 2) = L + O(h6 ) ... D(n, k − 1) = L + O(h2k ) siendo D(n, 0) = ϕ( 2hn ) y el resto de las cantidades D definidas recursivamente como D(n, k) = 4k 1 D(n, k − 1) − k D(n − 1, k − 1) k 4 −1 4 −1 Es obvio verificar que D(0, 0) = ϕ(h), D(1, 0) = ϕ( h2 ) y D(1, 1) = ψ(h). Finalmente, recalquemos una vez más que todo esto involucra el conocimiento de f en valores próximos a x (en concreto, en x + 2hn ) por lo que sólo deberá usarse si dichos valores están disponibles, o se pueden calcular sin gran error. 6.3 Integración numérica Dada una función f definida sobre un intervalo [a, b], estamos interesados en calcular Z b J(f ) = f (x)dx (6.11) a suponiendo que esta integral tenga sentido para la función f . La cuadratura o integración numérica consiste en obtener fórmulas aproximadas para calcular la integral J(f ) de f . Estos métodos son de gran utilidad cuando la integral no se puede calcular por métodos analı́ticos, su cálculo resulta muy costoso y estamos interesados en una solución con precisión finita dada o bien sólo disponemos de una tabla de valores de la función (es decir, no conocemos la forma analı́tica de f ). 6.3.1 Integración vı́a interpolación polinomial Una estrategia muy útil para calcular el valor numérico de la integral dada por la ecuación (6.11) consiste en reemplazar f por otra función g, fácil de integrar, que aproxima a f de forma adecuada. Si f ≈ g, se deduce que Z b Z b f (x)dx ≈ g(x)dx a a Los polinomios son buenos candidatos para el papel de g. De hecho, g puede ser un polinomio que interpola a f en cierto conjunto de nodos 1 . 1 Por ejemplo, también se puede recurrir a splines para interpolar a f y aprovechar que estas funciones son fácilmente integrables. Regla del trapecio 59 Supongamos que deseamos calcular la integral (6.11). Podemos elegir una serie de nudos, x0 , x1 , . . . , xn en el intervalo [a, b] e iniciar un proceso de interpolación de Lagrange (ver apartado 3.1.2 para una descripción de los polinomios de interpolación de Lagrange). El polinomio de grado menor o igual a n que interpola a f en los nudos es: p(x) = n X f (xi )`i (x) (6.12) i=0 La integral (6.11) se puede escribir entonces como: Z b Z b n Z b X f (xi )`i (x)dx p(x)dx = f (x)dx ≈ a a a i=0 Es decir, tenemos una fórmula general que se puede emplear para cualquier f y que tiene la forma: Z b n X f (x)dx ≈ Ai f (xi ) (6.13) a i=0 en donde Ai = 6.3.2 Z b `i (x)dx a Regla del trapecio Si en la expresión (6.13) empleamos polinomios de grado n = 1 y tomamos como nudos x 0 = a y x1 = b, tenemos el caso más sencillo posible, en donde los polinomios de interpolación son: `0 (x) = `1 (x) = por lo que: A0 = Z b `0 (x)dx = a b−x b−a x−a b−a 1 (b − a) = 2 Z b `1 (x)dx = A1 a La fórmula de cuadratura correspondiente es: Z b b−a f (x)dx ≈ [f (a) + f (b)] 2 a Esta expresión se conoce como regla del trapecio y proporciona un resultado exacto para todas las funciones de grado menor o igual a 1. Si en el intervalo de integración [a, b] se hace una partición en n subintervalos como la siguiente: a = x 0 < x1 < · · · < x n = b en donde los puntos se encuentran equiespaciados de acuerdo con las expresiones: xi = a + ih h = (b − a)/n (0 ≤ i ≤ n) 60 Integración numérica entonces se puede aplicar la regla del trapecio a cada uno de los subintervalos. Es ası́ como se obtiene la regla del trapecio compuesta, que adopta la forma: # " Z b n−1 X h f (a + ih) + f (b) f (x)dx ≈ f (a) + 2 2 a i=1 6.3.3 Regla de Simpson Empleando un razonamiento similar al anterior, podemos tomar un polinomio de grado n = 2 a+b para interpolar a f , que pase por (a, f (a)), ( a+b 2 , f ( 2 )) y (b, f (b)), con lo que obtendrı́amos la conocida regla de Simpson: Z b a+b b−a f (x)dx ≈ f (a) + 4f + f (b) (6.14) 6 2 a que es exacta para todos los polinomios de grado ≤ 2 y curiosamente, exacta para todos los polinomios de grado ≤ 3. En los cálculos prácticos se emplea, generalmente, la regla de Simpson compuesta, en la que el intervalo de integración [a, b] se divide en un número par, n, de subintervalos. Tenemos entonces: xi = a + ih (0 ≤ i ≤ n) en donde h = (b − a)/n Aplicando la regla de Simpson (6.14) en cada uno de los subintervalos se obtiene la expresión final: Z b n/2 n/2 X X h (6.15) f (x2i−2 ) + 4 f (x2i−1 ) + f (xn ) f (x)dx ≈ f (x0 ) + 2 3 a i=2 i=1