TEMA 1 Problemas de Valor Inicial para Ecuaciones Diferenciales Ordinarias: Métodos Numéricos de un paso 1. Introducción En la mayor parte de los problemas de las ciencias y la ingenierı́a, es necesario utilizar las ecuaciones diferenciales para modelizar los fenómenos a estudiar. En este curso, nos restringiremos al estudio de ecuaciones diferenciales de primer orden con condiciones iniciales. La generalización a sistemas de ecuaciones de primer orden es directa, ası́ como a ecuaciones diferenciales ordinarias de orden superior con condiciones iniciales. 2. Existencia, unicidad y estabilidad de la solución En este capı́tulo nos centraremos en las ecuaciones diferenciales de primer orden de la forma: y 0 (x) = f (x, y(x)) , x ∈ [a, b] , (1) con la condición inicial y(a) = y0 . En primer lugar, haremos un repaso de las condiciones bajo las cuales las ecuaciones diferenciales del tipo (1) tienen solución, que sea única, y además que la solución dependa continuamente de los parámetros de entrada (en este caso f (x, y) e y0 ). La existencia y unicidad de la solución la tenemos garantizada por el siguiente teorema, que enunciaremos sin demostración. En primer lugar supondremos que f (x, y) esta definida en la región R ⊂ R2 dada por R = {(x, y) ∈ R2 / x ∈ [a, b], y ∈ R}. 2.1 Teorema. Sea f (x, y) una función continua de x e y, para todo (x, y) ∈ R. Si la función f (x, y) es Lipschitziana respecto a la segunda variable, es decir, si |f (x, y) − f (x, y 0 )| ≤ L|y − y 0 | , ∀(x, y), (x, y 0 ) ∈ R , (2) para alguna constante L ≥ 0, entonces existe una única función y(x) que satisface la ecuación diferencial y 0 (x) = f (x, y(x)) en [a, b] con y(a) = y0 . La condición de que f (x, y) sea Lipschitziana se satisface automáticamente si f (x, y) es (x,y) es acotada en R. Basta aplicar el teorema derivable respecto a la segunda variable y ∂f∂y (x,y) del valor medio respecto a la segunda variable, obteniéndose que L es una cota para ∂f∂y en R. Para la resolución numérica de una ecuación diferencial, no basta con que la solución exista y sea única, es necesario además una dependencia continua de la solución respecto a 1 los parámetros de entrada. En el ámbito de las ecuaciones diferenciales, esta “continuidad”se denomina estabilidad. Bajo condiciones similares a las del teorema de existencia y unicidad, tenemos el siguiente teorema (que tampoco demostraremos): 2.2 Teorema: Si consideramos el problema perturbado y 0 (x) = f (x, y(x)) + δ(x) , y(a) = y0 + , (3) bajo las mismas hipótesis que en el teorema anterior, con δ(x) continua para todo x tal que (x, y) ∈ R, entonces la ecuación (3) tiene una única solución y(x; δ, ) en el intervalo [a, b], para todo || ≤ 0 y ||δ||∞ ≤ 0 , con 0 suficientemente pequeño. Además, si y(x) es la solución exacta al problema no perturbado, entonces máx |y(x) − y(x; δ, )| ≤ x∈[a,b] 1 [|| + (b − a)||δ||∞ ] . 1 − (b − a)L (4) Una vez que hemos visto que el problema de resolver una ecuación diferencial (bajo determinadas hipótesis) esta bien planteado (en la terminologı́a del primer capı́tulo), podemos afrontar su resolución numérica. Generalmente, la resolución numérica consistirá en hallar los valores de y(x) en cierto subconjunto discreto de valores de x, xi , i = 0, 1, . . . , n. Denotaremos por yi al valor y(xi ). Los métodos numéricos que consideraremos, dado el carácter introductorio de este capı́tulo, son el método de Euler y el de Runge-Kutta. Estos son métodos de un paso, en el sentido de que para obtener yn+1 tan sólo se requiere el conocimiento de yn . Existen otros métodos, denominados multipaso, en los cuales para calcular yn+1 se requiere conocer los valores yn , yn−1 , . . . , yn−k+1 , si el método es de k pasos. Estos métodos presentan el inconveniente de que se requieren k valores de y para comenzar a funcionar, por lo que necesitan k − 1 pasos de un método de un paso (tal y como un Runge-Kutta) previamente. Por contra, presentan la ventaja de que aminoran los errores que se producen en cada paso al utilizar más de un valor de y, y sobre todo porque en la resolución numérica de ecuaciones diferenciales con valores iniciales el error aumenta a medida que se realizan más pasos, de manera que al principio se comete menos error mientras que al final del intervalo los errores son grandes. Por eso es natural que se disminuya el error al utilizar cuantos más valores previos mejor, pues estos presentan menor error. Los métodos multipaso los estudiaremos en el siguiente capı́tulo. 3. El método de Euler El método de Euler es el más simple de todos los métodos numéricos de resolución de ecuaciones diferenciales. En la práctica no es utilizado, pues ha sido ampliamente superado por otros métodos. Sin embargo, por su simplicidad y por contener la mayor parte de las ideas en las que se fundamentan el resto de los métodos utilizados, sirve como introducción en cualquier libro sobre resolución numérica de ecuaciones diferenciales. Por simplicidad, vamos a suponer que los nodos xi están equiespaciados, de manera que xi = x0 + ih, con h la separación entre nodos y x0 = a. Entonces, el método de Euler se define como: yn+1 = yn + hf (xn , yn ) , (5) 2 con y0 = y(x0 ). Esta expresión es fácil de obtener de diversos modos: geométricamente, aproximando la función por su tangente, haciendo el desarrollo de Taylor y quedándonos en primer orden, aproximando la derivada y 0 (x) por su versión finita (y(xn+1 ) − y(xn ))/h, o integrando la ecuación directamente utilizando la regla del rectángulo izquierda. La ventaja de derivar el método de Euler de diferentes formas es su fácil generalización. Tomando más términos en el desarrollo de Taylor tenemos los métodos de Taylor de orden superior (en particular los Runge-Kutta). Por otro lado, aproximando la integral tomando más puntos intermedios tenemos los métodos multipaso. Es posible dar teoremas que garantizan la convergencia del método de Euler y cotas para el error local, es decir, el error que se comete en el cálculo de yn+1 a partir de yn . 3.1 Teorema: Bajo las condiciones del teorema de existencia y unicidad, y suponiendo que la solución exacta y(x) tiene derivada segunda acotada en el intervalo [a, b], entonces la solución obtenida por el método de Euler satisface: máx |y(xn ) − yn | ≤ e(b−a)L |e0 | + h a≤xn ≤b e(b−a)L − 1 00 ||y ||∞ , 2L (6) con e0 = y(x0 ) − y0 . Cuando y0 = y(x0 ), que es el caso más normal, se tiene que |y(xn ) − yn | ≤ ch, con c constante, indicando que el error local en el método de Euler es proporcional a h. Además del error que se produce al aproximar y(xn ) por yn en el método de Euler, hemos de tener en cuenta los errores de redondeo que se producen al hacer los cálculos en aritmética finita. Si llamamos ỹn al valor real calculado, se tendrá: ỹn+1 = ỹn + hf (xn , ỹn ) + ρn . (7) Denotemos por ρ el máximo valor que toma |ρn |. Este valor no decrece cuando h → 0, sino que se mantiene aproximadamente constante, de manera que ρ ≈ u||y||∞ , donde u es la unidad de máquina. Si llamamos ẽn al error real en y(xn ), ẽn = y(xn ) − ỹn , se puede demostrar que: ρ e(b−a)L − 1 h 00 (b−a)L ||y ||∞ + . (8) ẽn ≤ e |y(x0 ) − ỹ0 | + K 2 h Si asumimos que ỹ0 = y(x0 ), entonces se tiene que ẽn ≤ c h2 ||y 00 ||∞ + hρ , revelando que el error real no tiende a cero cuando h → 0. Este comportamiento es similar al que ocurrı́a en la derivación numérica y es consecuencia del mal condicionamiento de la derivación. En la práctica, el comportamiento no es exactamente de este modo, es decir, el error no crece como 1/h al tender h a cero, pero sı́ existe un h∗ óptimo a partir del cual el error crece si disminuimos h. Al igual que ocurrı́a con la derivación numérica, una vez que se conoce el comportamiento del error para h → 0, es posible mejorar la solución usando la técnica de la extrapolación de Richardson. 3 4. Métodos de Runge-Kutta Como ya hemos comentado, el método de Euler consiste en quedarse con el primer término del desarrollo de Taylor de la solución. Este método es fácilmente generalizable a ordenes mayores simplemente tomando más términos en el desarrollo de Taylor. De esta manera se pueden conseguir métodos cuyo error vaya como O(h2 ), O(h3 ), etc. El problema de estos métodos es que requieren calcular derivadas de ordenes superiores de la función f (x, y). Los métodos de Runge-Kutta substituyen el cálculo de las derivadas de f (x, y) por la evaluación de esta función en puntos intermedios, de manera que sigan manteniendo el mismo error que el método de Taylor correspondiente. Resultan ası́ unos métodos muy compactos y sencillos de programar, por lo que se han popularizado bastante. La idea general para estos métodos es substituir en el método de Euler el valor de la pendiente f (xn , yn ), que es exacta sólo en xn , por un especie de valor promedio para el intervalo [xn , xn+1 ], F (xn , yn ; h). La forma de estos métodos es: yn+1 = yn + hF (xn , yn ; h) . (9) Comencemos por el método más sencillo, de orden 2. Supongamos que F es de la forma F (x, y, ; h) = γ1 f (x, y) + γ2 f (x + αh, y + βhf (x, y)), donde las constantes {γ1 , γ2 , α, β} se determinan de manera que al substituir la solución exacta en (9) se tenga un error de truncamiento similar al del método de Taylor de orden 2, es decir, orden O(h3 ). Esto conduce a unas ecuaciones que relacionan estos parámetros, dando lugar a una familia uniparamétrica de métodos de Runge-Kutta de orden 2. El error para la solución de estos métodos es de orden O(h2 ). Del mismo modo se procede para los métodos de orden mayor. El más clásico es el de orden 4, que tiene la siguiente forma: con h yn+1 = yn + [K1 + 2k2 + 2K3 + K4 ] , 6 (10) K1 = f (xn , yn ) , K2 = f (xn + h2 , yn + h2 K1 ) K3 = f (xn + h2 , yn + h2 K2 ) , K4 = f (x + h, yn + hK3 ) . (11) Este método resulta ser efectivamente de cuarto orden, y el error en la solución va como O(h4 ). Una variante de los métodos de Runge-Kutta es el método Runge-Kutta-Fehlberg. En este método se utiliza un método de Runge-Kutta de orden 4 junto con otro de orden 5 que sirve para estimar el error local (tomando la solución yn proporcionada por el de orden 5 como exacta). De esta manera, si en el paso n-ésimo el error local obtenido es muy grande, se disminuye el valor de h es este paso y se recalcula yn con este h. Del mismo modo. cuando el error es muy pequeño, se aumenta h para evitar un número innecesario de cálculos en las regiones en las que la solución es muy suave. 4