CAPITULO 3 Métodos numéricos La primera inclinación a la hora de resolver un problema es intentar obtener una solución exacta. Sin embargo, en muchos casos no disponemos de las técnicas suficientes para obtenerla o las existentes presentan mucha dificultad. De hecho podrı́amos preguntarnos si nos bastarı́a con una solución lo suficientemente precisa, ¿para qué queremos saber la longitud de una pared con precisión de milı́metros si con decı́metros nos basta?. Es por ello que, en muchos casos, es interesante utilizar técnicas numéricas para obtener una solución aproximada de ecuaciones, integrales, ecuaciones diferenciales, etc. 3.1 Método de Newton El método de Newton o de la tangente, se trata de un algoritmo que nos permite aproximar las raı́ces de funciones, es decir, los valores de x en los que f (x) = 0, y que puede ser utilizado para el cálculo de soluciones aproximadas de sistemas de ecuaciones. 3.1.1 Interpretación geométrica La idea geométrica de este método consiste en escoger un valor de x, uno que creemos que esté acerca de la solución, y utilizar la recta tangente a la función por dicho punto para obtener una aproximación mejor. 41 3. Métodos numéricos Imaginemos que queremos saber por donde corta la función f (x) = ex + x al eje x. Tomamos una primera aproximación de la solución, por ejemplo x1 = 1. Trazamos la tangente a la función por el punto (1, f (1)) y miramos por donde corta al eje x y obtenemos una segunda aproximación x2 = 0 6 4 2 -2 1 -1 2 -2 Repetimos el proceso para x2 = 0. Tenemos que si trazamos la tangente a f por el punto (0, f (0)) y calculamos por donde corta al eje x, en este caso obtenemos una tercera aproximación x3 = −0.5. 6 4 2 -2 1 -1 2 -2 A medida que iteramos el proceso, siempre que la aproximación inicial sea adecuada, nos acercanremos más al valor que estamos buscando. De los métodos para buscar raı́ces de funciones, el método de Newton es el que más rápido converge. Sin embargo hay que tener en cuenta que no siempre converge, esto depende de la aproximación inicial que tomemos. Es por ello que es muy importante el tomar una primera aproximación que no se aleje mucho de la solución. Por ejemplo, si consideramos f (x) = x4 + 2x3 − x − 1 y comenzamos tomando x1 = 0 observamos que no converge, que alternativamente obtenemos los valores 0 y −1. 42 3.1 Método de Newton -2.0 -1.5 -1.0 1.0 1.0 0.5 0.5 0.5 -0.5 1.0 -2.0 -1.5 -1.0 0.5 -0.5 -0.5 -0.5 -1.0 -1.0 -1.5 -1.5 1.0 3.1.2 Resolución analı́tica Supongamos que tenemos una función f y queremos resolver f (x) = 0. Como bien dijimos anteriormente, si tenemos una aproximación x1 de la solución, el método de Newton busca una aproximación más precisa viendo por donde corta al eje x la tangente a f que pasa por (x1 , f (x1 )). En otras palabras trata de resolver f (x1 ) + f 0 (x1 )(x − x1 ) = 0. De este modo, despejando de la ecuación anterior, tenemos que una segunda aproximación serı́a x2 = x1 − f (x1 ) . f 0 (x1 ) Iterando este proceso, si hemos tomado una primera aproximación suficientemente cercana a la solución, obtendremos en cada iteración una aproximación más precisa de la solución xn = xn−1 − f (xn−1 ) . f 0 (xn−1 ) El error del método de Newton es un error cuadrático, es decir, si llamamos α a la solución exacta |xn+1 − α| < (xn − α)2 . Es decir, el número de cifras decimales exactas se duplica en cada iteración. Si tenemos una solución que tiene una precisión de décimas (0.1) entonces la aproximación de la siguiente iteración tendrá una precisión de centésimas (0.01) y la siguiente de diezmilésimas (0.0001). 43 3. Métodos numéricos 3.1.3 Localización de raices Como hemos comentado anteriormente es importante tener cuidado con la primera aproximación que se toma para arrancar el algoritmo del método de Newton ya que de ello dependerá (de cómo de buena sea esa aproximación) si el método convergerá o no a la solución buscada. El objetivo es determinar un intervalo [a, b], lo suficientemente pequeño, donde se anule la función. La forma de determinarlo es empı́rica, es decir, tomando dos valores a y b, y utilizar resultados matemáticos para estudiar si entre ellos se encuentra alguna raı́z y, en su caso si esta es única. Teorema 3.1 (Teorema de Bolzano). Supongamos que f es una función continua. Dado un intervalo [a, b] si f (a)f (b) < 0 entonces existe c ∈ [a, b]tal que f (c) = 0 Gráficamente esto significa que si una función cambia de signo en a y en b, entonces tiene que cortar al eje x. Por ejemplo, si consideramos la función f (x) = ex + x y los puntos a = −1 y b = 0 tenemos que en a la función es negativa y en b es positiva, luego en ese intervalo existe al menos una raı́z. 6 4 2 -2 1 -1 2 -2 El problema es que con el Teorema de Bolzano podemos asegurar que al menos hay una solución pero no podemos afirmar que solo hay una solución. Para ello tendrı́amos que ayudarnos del Teorema de Rolle. Teorema 3.2 (Teorema de Rolle). Supongamos que f es una función continua y derivable. Dado un intervalo [a, b] si f (a) = f (b) entonces existe c ∈ [a, b]tal que f 0 (c) = 0 En el siguiente ejemplo (f (x) = x4 + 2x3 − x − 1, a = −1 y b = 0) vemos cómo la interpretación gráfica de este resultado. 44 3.1 Método de Newton 1.0 0.5 -2.0 -1.5 -1.0 0.5 -0.5 1.0 -0.5 -1.0 -1.5 Por lo tanto, para poder asegurar que en un intervalo [a, b] existe un único punto c en el que la función corte al eje x es decir f (c) = 0 basta con ver que f (a)f (b) < 0 (Teorema de Bolzano) y que la derivada es siempre o positiva o negativa en ese intervalo, ya que por el Teorema de Rolle podemos asegurar que no hay dos puntos en ese intervalo en el que la función tenga el mismo valor y, por tanto, tampoco en los que se corte al eje x. 3.1.4 Aplicación del método de Newton El método de Newton es útil a la hora de encontrar soluciones a ecuaciones. Para ello, lo único que hay que hacer es transformar a ecuación a la forma deseada (f (x) = 0) y aplicar el método. Por ejemplo si queremos resolver ex = −x lo único que necesitamos es despejar para que uno de los términos de la igualdad se anule, es decir considerar ex + x = 0. Entonces, es claro que para obtener una solución aproximada de ex = −x bastarı́a con aplicar el método a la función f (x) = ex + x. Esto también puede aplicarse a la resolución de sistemas de ecuaciones, para ello lo único que habrı́a que hacer es transformar todas las ecuaciones en la forma f (x) = 0 y aplicar el método de Newton adaptado para un sistema de ecuaciones. En el siguiente cuadro se resumen las transformaciones que hay que hacer a la hora de aplicar Newton a una ecuación o a un sistema de dos ecuaciones con dos incógnitas (para n ecuaciones con n incógnitas únicamente hay que generalizar la transformación). 45 3. Métodos numéricos Ecuación / Sistema Transformación f (x) = 0 f (x0 ) + f 0 (x0 )(x − x0 ) = 0 f (x, y) = 0 f (x0 , y0 ) + df (x0 , y0 ) df (x0 , y0 ) (x − x0 ) + (y − y0 ) = 0 dx dy g(x, y) = 0 g(x0 , y0 ) + dg(x0 , y0 ) dg(x0 , y0 ) (x − x0 ) + (y − y0 ) = 0 dx dy Básicamente, el método de Newton permite transformar, a partir de una solución aproximada, un problema no lineal a uno lineal, que puede ser resuelto sin ninguna dificultad, cuya solución mejore la precisión de la solución aproximada del problema original que habı́amos escogido anteriormente. Buscar aproximaciones gráficamente Aunque ya hemos visto cómo podemos intentar localizar raı́ces de forma analı́tica siempre podemos tratar de representar gráficamente el problema para localizar visualmente la aproximación inicial. Sin embargo esto es sólo recomendable cuando se puede hacer utilizando funcione elementales cuyas gráficas son conocidas. Por ejemplo, supongamos la ecuación ex = −x. La idea es ver donde cortan las funciones ex y −x (es decir, donde son iguales). 6 4 2 -2 1 -1 2 -2 Podemos ver que la solución se encuentra en el intervalo [−1, 0]. En el caso de los sistemas de ecuaciones, lo ideal es representar implı́citamente la gráfica. 46 3.2 Polinomio de interpolación Por ejemplo, si tenemos el siguiente sistema de ecuaciones (x − 0.2)2 + (y − 0.2)2 = 1 (x + 0.2)2 + (y + 0.2)2 = 1 tenemos que las ecuaciones son dos circunferencias de radio 1 centradas en el (0.2, 0.2) y en el (−0.2, −0.2) respectivamente. 1.0 0.5 -1.0 0.5 -0.5 1.0 -0.5 -1.0 De esta forma, podemos ver que una solución se encuentra [−1, −0.5] × [0.5, 1] (recordemos que esto significa que hay que escoger x0 en [−1, −0.5] e y0 en el [0.5, 1]) y otra en [0.5, 1] × [−1, −0.5]. 3.2 Polinomio de interpolación Dados n puntos (x1 , y1 ), (x2 , y2 ) . . . (xn , yn ), el polinomio de interpolación de esos puntos es el polinomio que pasa por todos ellos. A continuación se muestra el polinomio de interpolación de los puntos (−1, 4), (0, 2), (1, 6) y (2, 4). 10 5 -2 1 -1 -5 47 2 3 3. Métodos numéricos El polinomio de interpolación es muy util a la hora de calcular numéricamente la integral o la derivada de una función. La idea es considerar el polinomio que mejor se ajusta a una función para calcular de forma aproximada su integral o su derivada numérica de forma más sencilla. Dada una función hay varias formas de construir un polinomio de interpolación que se ajuste a ella. La más sencilla de ellas es la fórmula de las diferencias divididas de Newton, que nos ofrece un polinomio de orden n − 1. La idea principal es escoger varios puntos de nuestra función y calcular el polinomio de interpolación que pasa por ellos. Imaginemos que hemos tomado 4 puntos (x0 , y0 ), (x1 , y1 ), (x2 , y2 ) y (x3 , y3 ). Calculamos la siguiente tabla: x x0 y y0 Orden 1 α1 = x1 α2 = y2 − y1 x2 − x1 y2 Orden 3 β1 − α1 x2 − x0 α3 = β2 = γ1 = x3 y1 − y0 x1 − x0 y1 β1 = x2 Orden 2 y3 − y2 x3 − x2 γ1 − β1 x3 − x1 β2 − α2 x3 − x0 y3 El polinomio de interpolación de grado 3 que obtenemos viene dado por p(x) = y0 + α1 (x − x0 ) + α2 (x − x0 )(x − x1 ) + α3 (x − x0 )(x − x1 )(x − x2 ). Hay que destacar que el polinomio de interpolación por regla general no se ajusta bien a la función a medida que nos alejamos de los puntos escogidos de la función. La idea es que escojamos los puntos dentro del intervalo que nos convenga (el intervalo en el que estamos integrando o un intervalo en el que se encuentre el punto en el que queremos hallar la derivada) y de forma que entre dos puntos la función no sufra variaciones muy grandes. Para que el polinomio de interpolación se ajuste más uniformemente a la función en el intervalo [a, b] que consideremos, escogeremos valores en la coordenada x igualmente espaciados. En tal caso, si quisiéramos calcular el polinomio de interpolación de orden n, 48 3.2 Polinomio de interpolación tomando h= b−a , n los puntos a considerar serı́an (xi , yi ) = (a+ih, f (a+ih)) con 0 ≤ i ≤ n. Si consideramos el ejemplo anterior quedarı́a tenemos que x x0 y y0 x1 y1 Orden 1 y1 − y0 h y2 − y1 h x2 y2 x3 y3 − y1 h y3 Orden 2 Orden 3 y2 − 2y1 + y0 2h2 y3 − 3y2 + 3y1 − y0 3h3 y3 − 2y2 + y1 2h2 Hagamos el siguiente ejemplo práctico Ejemplo 3.1. Polinomio de interpolación de orden 4 para f (x) = 1 en [−2, 2]. En x2 + 1 este caso los puntos serı́an 1 1 1 1 −2, , −1, , (0, 1), 1, , 2, 5 2 2 5 y tendrı́amos que h = 2 − (−2) = 1. Resolvemos la tabla 4 x y −2 1/5 −1 1/3 Orden 1 Orden 2 Orden 3 Orden 4 3/10 1/10 −1/5 1/2 0 −1/2 1 −1/2 1 1/2 1/10 −3/10 2 1/10 1/5 1/5 49 3. Métodos numéricos El polinomio de interpolación es 1 3 1 1 1 + (x + 2) + (x + 2)(x + 1) − (x + 2)(x + 1)x + (x + 2)(x + 1)x(x − 1) 5 10 10 5 10 Observemos gráficamente cómo se ajusta a la función original 2.5 2.0 1.5 1.0 0.5 -3 -2 1 -1 2 3 3.3 Integración numérica Integrar una función en muchas ocasiones es un proceso complicado y, en muchos casos no disponemos de las herramientas necesarias para calcularla. La integración numérica son procedimientos de aproximación numérica que facilitan el cálculo de integrales definidas en un intervalo. Las reglas más conocidas son las del trapecio, Simpson I y Simpson II. La idea es aproximar la función a integrar en un intervalo [a, b] por un polinomio de interpolación, ya que son sencillos de integrar, obteniendo ası́ una aproximación de la integral original. 3.3.1 Regla del trapecio simple 1.2 En este caso se trata de aproximar la 1.0 función mediante el polinomio de interpolación de grado 1 o lo que es lo mismo 0.8 una recta formando ası́ un trapecio. En este 0.6 caso, los valores de xi son los extremos 0.4 del intervalo, distanciados por h = b − a. 0.2 Llamando yi = f (xi ), tenemos que el poli- -2 nomio de interpolación de orden 1 es 50 -1 0 1 2 3.3 Integración numérica p(x) = y0 − y1 − y0 (x − x0 ) h obteniendo la regla del trapecio b Z Z x1 f (x)dx ≈ p(x)dx = x0 a h (y0 + y1 ). 2 3.3.2 Regla de Simpson I simple 1.2 En este caso se trata de aproximar la 1.0 función mediante el polinomio de interpolación de grado 2. En este caso, los 0.8 valores de xi son los extremos y el punto 0.6 medio del intervalo, de forma que la distanb−a cia que los separa es h = . Tomando 2 yi = f (xi ) tenemos que el polinomio de 0.4 0.2 -2 0 -1 1 2 interpolación de orden 2 es p(x) = y0 − y1 − y0 y2 − 2y1 + y0 (x − x0 ) + (x − x0 )(x − x1 ) h 2h2 se deduce la regla de Simpson I Z b Z x2 f (x)dx ≈ a p(x)dx = x0 h (y0 + 4y1 + y2 ). 3 3.3.3 Regla de Simpson II simple 1.2 Simpson II funciona de forma similar a 1.0 las reglas anteriores. En este caso se aproxima la funciónpor un polinomio de inter- 0.8 polación de grado 3 tomando 4 puntos xi 0.6 igualmente espaciados por una distancia de b−a h= . Si llamamos yi = f (xi ) y p(x) 3 al polinomio de interpolación, tenemos que 0.4 0.2 -2 la expresión en este caso viene dada por 51 -1 0 1 2 3. Métodos numéricos Z b Z x3 f (x)dx ≈ a p(x)dx = x0 3h (y0 + 3y1 + 3y2 + y3 ). 8 3.3.4 Reglas del trapecio, Simpson I y Simpson II compuestas A medida que incrementamos el grado del polinomio de interpolación el error que cometemos se reduce considerablemente. En el siguiente ejemplo, el error se reduce un 50% al utilizar Simpson I y al utilizar Simpson II se reduce un 90% respecto a Simpson I. -2 -1 1.2 1.2 1.2 1.0 1.0 1.0 0.8 0.8 0.8 0.6 0.6 0.6 0.4 0.4 0.4 0.2 0.2 0.2 0 1 2 -2 Trapecio: 1.21 -1 0 1 2 -2 Simpson I: 0.63 -1 0 1 2 Simpson II: 0.06 Siguiendo esa tendencia, podrı́amos buscar una regla utilizando un polinomio de un orden muy elevado para obtener una precisión mucho mayor, sin embargo el esfuerzo que se requiere respecto con la mejora que se obtiene hace que sea más interesante utilizar reglas compuestas. Esto es, dividir el intervalo de integración en m partes, en nuestro caso b−a iguales a una distancia de d = , aplicar en cada uno de ellos la misma regla (trapecio, m Simpson I o Simpson II) para aproximar el valor Pi de la integral en cada una de ellas y sumar todos los resultados para obtener el total de forma que el valor de la integral es I = P1 + P2 + · · · + Pm . Recordemos como calcular en cada parte el valor aproximado de la integral utilizando las diferentes reglas: 1.2 • Trapecio: En este caso cada parte no se 1.0 subdivide, por lo que el número total de 0.8 puntos es m y h = d. El valor en cada 0.6 parte viene dado por Pi = 0.4 h (yi−1 + yi ). 2 0.2 -2 52 -1 0 1 2 3.3 Integración numérica 1.2 • Simpson I: En este caso en cada parte 1.0 se toma también el punto medio, por lo 0.8 que el número total de puntos es 2m + 1 0.6 y h = d/2. El valor en cada parte viene 0.4 dado por 0.2 h Pi = (y2i−2 + 4y2i−1 + y2i ). 3 -2 -1 0 1 2 0 1 2 1.2 • Simpson II: En este caso en cada parte 1.0 se toman dos puntos igualmente espa- 0.8 cioados, por lo que el número total de 0.6 puntos es 3m + 1 y h = d/3. El valor 0.4 en cada parte viene dado por 0.2 3h Pi = (y3i−3 +3y3i−2 +3y3i−1 +y3i ). 8 -2 -1 Veamos a continuación un ejemplo de cómo se resuelven este tipo de problemas. Ejemplo 3.2. Calculemos la integral Z 2 I= −2 x2 1 dx +1 dividiendo el intervalo de integración [−2, 2] en m = 4 partes. Si utilizamos la regla del trapecio tenemos los siguientes puntos separados por h = 1: x0 x1 x2 x3 x4 −2 −1 0 1 2 Calculamos el valor de la función “yi = f (xi )” en cada punto y0 = 0.2, y1 = 0.5, Calculemos la aproximación Pi = P1 = P2 = y2 = 1, y3 = 0.5, y4 = 0.2. h (yi−1 +yi ) de la integral en cada uno de esos trozos 2 1 (0.2 + 0.5) = 0.35 2 1 (0.5 + 1.0) = 0.75 2 P3 = P4 = 53 1 (1.0 + 0.5) = 0.75 2 1 (0.5 + 0.2) = 0.35 2 3. Métodos numéricos La aproximación es la suma de todos los trozos I ≈ 0.35 + 0.75 + 0.75 + 0.35 = 2.2. Si observamos el ejemlo anterior, tenemos que estamos operando por 1/2 cuatro veces, cuando podrı́amos sacarlo como factor común y operar al final. Esto ocurre en todos los métodos, de forma que podemos ahorrar algunas operaciones. Volvamos a repetir el Ejemplo 3.2 utilizando Simpson I: Ejemplo 3.3. Tenemos los siguientes puntos separados por h = 1/2: x0 x1 x2 x3 −2 −1.5 −1 −0.5 x4 x5 x6 x7 x8 0 0.5 1 1.5 2 Calculamos el valor de la función “yi = f (xi )” en cada punto y0 = y8 = 0.2, y1 = y7 = 0.3, y2 = y6 = 0.5, y3 = y5 = 0.8, y4 = 1. Calculemos la ahora el valor Si = (y2i−2 + 4yi ) S1 = 0.2 + 4 · 0.3 + 0.5 = 1.9 S3 = 1.0 + 4 · 0.7 + 0.5 = 2.2 S2 = 0.5 + 4 · 0.7 + 1.0 = 2.2 S4 = 0.5 + 4 · 0.3 + 1.0 = 1.9 Tenemos entonces que I ≈ h (S1 + S2 + S3 + S4 ) = 1.37. 3 Otra forma de expresar las reglas compuestas es unificar todos los términos en una única suma. Para ello simplemente hay que tener en cuenta que hay valores, los que delimitan cada parte, que se cuentan dos veces, exceptuando y0 e yn . De modo que podemos utilizar: n−1 X h • Trapecio: I ≈ y0 + 2 yi + yn . 2 i=1 • Simpson I: I ≈ n−1 n−2 X X h y0 + 4 yi + 2 yi + yn . 3 i=1,3,... • Simpson II: I ≈ i=2,4,... n−3 n−2 n−1 X X X 3h yi + yn . y0 + 3 yi + 3 yi + 2 8 i=1,4,... i=2,5,... 54 i=3,6,... 3.3 Integración numérica La convergencia de estas reglas no es uniforme. Podemos asegurar que si incrementamos suficientemente el número de divisiones el error se reducirá, pero en pequeñas variaciones puede empeorar. Por ejemplo, si pasamos de 2 a 4 trozos podemos asegurar que el error no va a aumentar. Sin embargo, si pasamos de 2 a 3 trozos no lo podemos asegurar. -2 1.0 1.0 1.0 0.8 0.8 0.8 0.6 0.6 0.6 0.4 0.4 0.4 0.2 0.2 0.2 0 -1 1 2 -2 0 -1 Error: 0.035 1 2 -2 0 -1 Error: 0.076 1 2 Error: 0.035 Esto se debe a que cuando se divide en 4 trozos el intervalo estamos subdividiendo los ya existentes. Sin embargo, al dividir en 3 trozos el intervalo la distribución de estos puede empeorar a la anterior. De esta forma podemos asegurar que si incrementamos el número de trozos el doble el resultados que obtendremos en no empeorará al anterior. 3.3.5 Método de Romberg Es un método que utiliza el método de los trapecios varias veces cambiando el valor de h para acelerar la convergencia. La idea básica es fijar un h inicial y realizar el método de los trapecios para divisiones progresivas de h (es decir h, h/2, h/4, etc.) y calcular unas aproximaciones de forma recursivamente según la siguiente tabla. Aprox 1 Aprox 2 A1,1 = Th A2,2 = Aprox 3 4A1,2 − A1,1 3 A1,2 = Th/2 A3,4 = A2,4 = 4A1,4 − A1,2 3 A1,4 = Th/4 A1,8 = Th/8 .. . 42 A2,4 − A2,2 42 − 1 ··· A3,8 = A2,8 = 42 A 2,8 − A2,4 42 − 1 4A1,8 − A1,4 3 .. . .. . 55 ··· 3. Métodos numéricos En términos generales, si realizamos el método de los trapecios n veces, tenemos que h varı́a en la forma h/(2i ) para 0 ≤ i ≤ n − 1, teniendo una tabla con n columnas La primera columna, está formada por A1,2i = Th/(2i ) que son los valores obtenidos al aplicar el método de los trapecios dividiendo el intervalo de integración en partes de longitud h/(2i ). Por regla general, se tiene que Ai+1,2j = 4i Ai,2j − Ai,2j−1 4i − 1 y pararemos cuando obtengamos el valor de An−1,2n−1 . Cuanto más pequeño sea el valor de h más rápido convergerá el método. Ejemplo 3.4. Si hacemos el método de Romberg para calcular Z 2 −2 x2 1 dx +1 comenzando con h = 1 y n = 4, tenemos que la tabla queda de la siguiente manera Trapecio 2.2000 Aprox 1 Aprox 2 Aprox 3 2.2103 2.2077 2.2146 2.2143 2.2143 2.2126 2.2143 2.2143 2.2139 3.4 Resolución numérica de EDOs de primer orden No existe un método general para resolver ecuaciones diferenciales. Hemos visto como resolver algunos tipos de ecuaciones diferenciales de primer orden, pero hay muchos más tipos. De hecho, no siempre existe un método para resolver una ecuación diferencial. Es por ello que existen métodos se resolución numérica, cuyo objetivo es calcular valores aproximados de la solución del problema de valores iniciales 0 y (x) = F (x, y(x)) y(x0 ) = y0 56 3.4 Resolución numérica de EDOs de primer orden en un entorno de la condición inicial x0 . De modo que la poligonal definida por dichas aproximaciones es una aproximación de la solución. 3.0 2.5 2.0 1.5 0.6 0.8 1.0 1.2 1.4 Los métodos de resolución numérica de ecuaciones diferenciales calculan aproximaciones de y(x), a partir una ya conocida “y(x0 ) = y0 ”, para diferentes valores xi separados por una distancia constante h, de forma que la precisión mejora cuando h disminuye. Son métodos iterativos, es decir, cada nueva punto (xi+1 , yi+1 ) se calcula a partir de la anterior (xi , yi ). Por tanto, yi+1 es menos preciso que yi , ya que el error se va acumulando. Habitualmente, cuando se afronta un problema concreto, la estimación de y(x) se centra en un intervalo determinado [a, b] con origen (o final) en x0 , de forma que h= b−a . n En este apartado supondremos que nos alejamos de x0 positivamente ya que la idea de los métodos que estudiaremos no difiere de cuando nos alejamos negativamente. En tal caso, bastarı́a con aplicar −h en lugar de h en las fórmulas correspondientes. 3.4.1 Método de Euler El método de Euler consiste en aproxi- 5.0 4.5 mar las soluciones utilizando la recta tan- 4.0 gente a la a la solución del problema de 3.5 3.0 valores iniciales 0 y (x) = F (x, y(x)) y(x0 ) = y0 2.5 2.0 0.6 57 0.8 1.0 1.2 1.4 1.6 1.8 2.0 3. Métodos numéricos Supongamos tenemos un punto x1 separado a una distancia h de x0 , es decir, x1 = x0 + h, y que queremos hallar una aproximación de y(x1 ). Como conocemos y0 = y(x0 ) e y 0 (x0 ) = F (x0 , y0 ) podemos construir la función de la recta que pasa por por el punto (x0 , y0 ) con pendiente F (x0 , y0 ), es decir, la tangente a y(x) en x0 . f (x) = y0 + F (x0 , y0 )(x − x0 ). Calculamos y1 = f (x1 ) = y0 + F (x0 , y0 )(x1 − x0 ). Repitiendo el proceso podemos calcular y2 e iterando hasta n habremos obtenido todas las aproximaciones. En general, la aproximación i + 1 se calcula de la forma yi+1 = yi + F (xi , yi )(xi+1 − xi ) = yi + hF (xi , yi ). A continuación realizaremos un ejemplo práctico del método de Euler. Ejemplo 3.5. Aproximar en el intervalo [1, 2] la solución del problema de valores iniciales ( Por n = 10 puntos, es decir h = y 2x y(1) = 2 y0 = 2−1 = 0.1 10 2.8 y0 = 2 y1 y2 y3 2.6 x0 = y0 + h = 2.1 2y0 x1 = y1 + h = 2.1954 2y1 x2 = 2.2869 = y2 + h 2y2 .. . 2.4 2.2 2.0 1.0 1.2 1.4 1.6 1.8 2.0 3.4.2 Métodos de Runge-Kutta Los métodos Runge-Kutta de órden n actúan de forma similar al método de Euler. Para aproximar valor de yi+1 se utiliza una recta que pasa por (xi , yi ) con una pendiente mi = a1 k1 + a2 k2 + · · · + an kn , a1 + a2 + · · · + an 58 3.4 Resolución numérica de EDOs de primer orden que es un promedio de n valores k1 , . . . , kn de y 0 (x) es decir, F (x, y), quedando una expresión del tipo yi+1 = yi + mi (xi+1 − xi ) = yi + mi h. Para determinar los valores “k” y los pesos “a”, la idea en la que se basan los métodos de Runge-Kutta clásicos es transformar el problema de resolver 0 y (x) = F (x, y(x)) y(x0 ) = y0 en el equivalente de Z y x Z F (x, y(x))dx. dy = x0 y0 De este modo, tendrı́amos que podemos calcular una aproximación de la función a partir de un valor anterior, es decir Z xi+1 F (x, y(x))dx yi+1 = yi + (3.1) xi El objetivo es utilizar métodos de integración numérica (Trapecio o Simpson I) para calcular aproximaciones. Los métodos Runge-Kutta, utilizan aproximaciones iniciales de y(x) obtenidas a partir del método de Euler de forman que permiten mejorar su precisión. Runge-Kutta de segundo orden En este caso, el valor de la integral (3.1) en el intervalo [xi , xi + h] se aproxima por el método del trapecio, necesitando calcular los valores: k1 = F (xi , yi ) y k2 ≈ F xi + h, y(xi + h) . El problema es que no conocemos el Algoritmo RK2 valor y(xi + h) por lo que se aproxima por k1 = F (xi , yi ), el método de Euler: k2 = F (xi + h, yi + hk1 ), h yi+1 = yi + (k1 + k2 ) 2 y(xi + h) ≈ yi + hF (xi , yi ) = yi + hk1 . De este modo podemos calcular k2 y aplicar el método del trapecio. 59 3. Métodos numéricos Runge-Kutta de tercer orden En este caso, el valor de la integral (3.1) en el intervalo [xi , xi + h] se aproxima por el método de Simpson I, necesitando calcular los valores: k1 = F (xi , yi ), k2 ≈ F xi + h/2, y(xi + h/2) y k3 ≈ F xi + h, y(xi + h) . El problema nuevamente es que no conocemos y(xi + h/2) e y(xi + h). El primero se calcula como en el apartado anterior y(xi + h/2) ≈ yi + h h F (xi , yi ) = yi + k1 . 2 2 El valor de y(xi + h) se puede aproximar utilizando Euler a partir del valor yi : y(xi + h) ≈ yi + hF (xi , yi ) = yi + hk1 , o del valor y(xi + h/2) calculado anteriormente, y(xi + h) ≈ yi + h h F xi + h/2, y(xi + h/2) = yi + k2 . 2 2 Lo que se hace es utilizar una comAlgoritmo RK3 binación optimizada de ambos valores, ob- k1 = F (xi , yi ), h h k2 = F xi + , yi + k1 , 2 2 k3 = F xi + h, yi + h(2k2 − k1 ) , h yi+1 = yi + (k1 + 4k2 + k3 ) 6 teniendo: y(xi + h) ≈ yi + h(2k2 − k1 ). De este modo podemos calcular k3 y aplicar el método de Simpson I. Runge-Kutta de cuarto orden Nuevamente, se utiliza la regla de Simpson I para calcular la integral (3.1) en el intervalo [xi , xi + h]. La diferencia principal en este caso, se calculan los tres valores de F (x, y) necesarios para la regla de Sipson I utilizando el método de Euler con múltiples estimaciones de la pendiente. 60 3.5 Álgebra matricial. Factorización LU Tal y como se hacı́a en los apartados anteriores, tomando k1 = F (xi , yi ), calculamos h h F (xi , yi ) = yi + k1 , 2 2 y, utilizando este valor, calculamos el valor k2 ≈ F xi + h/2, y(xi + h/2) . y(xi + h/2) ≈ yi + Observemos que k2 aproxima a la pendiente de y(x) en el punto medio de [xi , xi + h], por lo que podemos volver a aproximar y(xi + h/2) utilizando esta nueva pendiente, es decir la pendiente de “llegada” y no la de “salida” y(xi + h/2) ≈ yi + h k2 . 2 Utilizando este valor en calculamos otra aproximación k3 ≈ F xi + h/2, y(xi + h/2) , de forma mejoramos la precisión haciendo una media de ambos valores, k2 + k3 . 2 Por último, calculamos el valor y(xi +h) Algoritmo RK4 a de xi por el método de Euler, utilizando k1 = F (xi , yi ), h k2 = F xi + , yi + 2 h k3 = F xi + , yi + 2 la última pendiente obtenida (k3 ), y(xi + h) ≈ yi + hk3 . Utilizando este valor, calculamos h k1 , 2 h k2 , 2 k4 = F xi + h, yi + hk3 , h yi+1 = yi + (k1 + 2k2 + 2k3 + k4 ) 6 k4 = F (xi + h, y(xi + h)) y se aplica el método de Simpson I. 3.5 Álgebra matricial. Factorización LU En las secciones anteriores hemos visto como una serie de algoritmos nos permiten calcular áreas, soluciones de ecuaciones, etc. de forma aproximada y a bajo coste, es decir realizando un número, relativamente pequeño de operaciones sencillas. En el caso del álgebra matricial, los métodos numéricos no suelen utilizarse para realizar aproximaciones, 61 3. Métodos numéricos sino para reducir el número de operaciones. En este caso vamos a estudiar la factorización LU (Lower Upper). A la hora de trabajar en álgebra matricial, el uso de matrices triangulares presenta una gran ventaja ya es muy sencillo realizar cálculos con ellas. Por ejemplo el determinante o resolver un sistema de ecuaciones. La idea de la factorización LU es descomponer una matriz A como el producto de dos matrices triangulares, una triangular inferior L y otra triangular superior U . De modo que nos quede que A = LU. La idea básica para obtener L y U es la eliminación Gaussiana. En el algoritmo de eliminación Gaussiana se permutan filas siempre que sea necesario. Sin embargo, para hacer la factorización LU , hay que suponer que estas permutaciones no son necesarias, ya que en tal caso mediante eliminación Gaussiana no conseguirı́amos obtener una matriz de paso P triangular. Más adelante, cuando veamos las aplicaciones de la factorización LU veremos como afectarı́a en el resultado si hubiese que realizar permutaciones. Recordemos en qué consistı́a la eliminación Gaussiana. Esta trata de triangularizar una matriz utilizando transformaciones elementales. Supongamos que tenemos la matriz 1 3 1 A= 2 4 3 3 3 7 Si hacemos la eliminación Gaussiana sobre esa matriz y replicamos los cambios sobre la identidad obtendrı́amos que 1 3 1 1 0 0 (A|I) = 2 4 3 0 1 0 3 3 7 0 0 1 A la segunda fila, le restamos dos veces la primera y a la tercera tres veces la primera. Es decir, hacemos F2 − 2F1 y F3 − 3F1 . 1 3 1 1 0 0 (U1 |P1 ) = 0 −2 1 −2 1 0 0 −6 4 −3 0 1 62 1 0 0 E1 = −2 1 0 −3 0 1 3.5 Álgebra matricial. Factorización LU Observemos que E1 son las transformaciones elementales que hay que hacer sobre A, replicados en la identidad. Se cumple que E1 A = U1 . Si continuamos haciendo eliminación Gaussiana, ahora hay que restar a la tercera fila tres veces la segunda. Es decir, hacemos F3 − 3F2 . 1 3 1 1 0 0 1 0 (U2 |P2 ) = 0 −2 1 −2 0 0 1 3 −3 1 1 0 0 1 0 E2 = 0 0 −3 1 Observemos que E2 son las transformaciones elementales que hay que hacer sobre U1 , replicados en la identidad. Se cumple que E2 U1 = U2 . O lo que es lo mismo, si llamamos U = U2 y P = P2 tenemos que P A = E2 E1 A = U A la matriz P se le llama Matriz de Paso, ya que permite transformar A en una triangular. De hecho, la matriz de paso es la composición de cada uno de los cambios, esto es P = E2 E1 Si llamamos entonces L = P −1 obtenemos que podemos factorizar A como A = LU . Veamos que calcular la inversa de P es muy sencillo. Por las propiedades de las matrices se tiene que P −1 = (E2 E1 )−1 = E1−1 E2−1 y calcular E1−1 y E2−1 es muy sencillo, basta con cambiar de signo los elementos que hay bajo la diagonal. Es decir E1−1 1 0 0 = 2 1 0 3 0 1 E2−1 1 0 0 = 0 1 0 . 0 3 1 Teniendo esto en cuenta, junto con que: 1. Los valores de las matrices Ei−1 son 1 en la diagonal y el resto 0 salvo (quizás) los de la columna i. 2. Vamos a multiplicar las matrices Ei−1 conservando el orden de las columnas i. 63 3. Métodos numéricos Podemos calcular L = E1−1 E2−1 como L = 3I − E1 − E2 , donde I denota a la matriz identidad. Sı́ntesis Para obtener la descomposición LU de una matriz A, hay que hacer eliminaciones Gaussianas. La matriz triangular superior que nos queda como resultado es la matriz U . En cada uno de los pasos, guardamos como Ei a las tranformaciones elementales que hay que hacer en ese paso (sobre la identidad). Entonces podemos calcular L como L = nI − E1 − E2 − · · · − En−1 . 3.5.1 Aplicación en distemas de ecuaciones Imaginemos que nos dan la descomposición LU de una matriz A, y queremos resolver el sistema Ax = b. Esto es exactamente lo mismo que hacer LU x = b. En otras palabras, bastarı́a con hacer U x = L−1 b. Si recordamos que L−1 = P básicamente serı́a hacer U x = P b. Observemos que esto tiene sentido. Cuando se resueve un sistema haciendo Gauss, las trasnformaciones se hacen tanto sobre los coeficientes como sobre el término independiente b. Por tanto cuando se hace Gauss nos queda, en efecto, un sistema del tipo U x = P b. Recordemos que estamos suponiendo que nos están dando tanto L como U , es decir que no nos dicen P . Podrı́amos calcular la inversa, pero es preferible seguir transformando el sistema para no tener que hacerla. Si llamamos y = P b se tiene que P −1 y = b es decir que Ly = b. Por tanto resolver el sistema Ax = b es equivalente a resolver el sistema Ly = b Ux = y 64 3.5 Álgebra matricial. Factorización LU lo cual presenta muchas ventajas ya que basta con resolver el sistema Ly = b aplicando el procedimiento de bajada para obtener y. Una vez obtenido y se resuelve U x = y aplicando en este caso el procedimiento de subida. En este caso, las permutaciones no influyen en el resultado, por lo que no es necesario tenerlas en cuenta. En el caso de fuese necesario hacerlas, si tenemos una matriz A, la transformarı́amos en otra A0 haciendo las permutaciones necesarias y, posteriormente calcuları́amos la descomposición LU de A0 . 3.5.2 Aplicación en cálculo de determinantes Imaginemos que nos dan la descomposición LU de una matriz A, y queremos calcular el determinante de A. Por las propiedades de los determinantes se tiene que |A| = |L||U |. Calcular el determinante de una matriz triangular es muy sencillo. Basta con calcular su traza, es decir, multiplicar todos los elementos de la diagonal. Como los elementos de la diagonal de L son siempre unos, se tiene que |L| = 1, es decir |A| = |U |. Como el determinante de U viene dado por u11 u12 · · · u1n 0 u22 · · · u2n |U | = . .. .. = u11 u22 · · · unn . .. .. . . . 0 0 · · · unn Luego |A| = u11 u22 · · · unn . En este caso, las permutaciones sı́ influyen en el resultado, concretamente en el signo del determinante. En el caso de fuese necesario hacerlas, si tenemos una matriz A, la transformarı́amos en otra A0 haciendo las permutaciones necesarias y, posteriormente calcuları́amos la descomposición LU de A0 . De esta forma tendrı́amos que el determinante de A es |A| = (−1)m (u11 u22 · · · unn ), siendo m el número de permutaciones que se han necesitado para obtener la matriz A0 . 65