SOLUCIÓN DE ECUACIONES DIFERENCIALES Autor: Keith Gregson Traducción: José Alfredo Carrillo Salazar Muchos sistemas dinámicos pueden representarse en términos de ecuaciones diferenciales. Por ejemplo, la tasa de cambio de temperatura de un cuerpo (u) que pierde calor por convección natural en un ambiente a temperatura constante (T), puede aproximarse con la siguiente ecuación: du = −0.55(u − T )1.25 dt Otro ejemplo es la tasa de cambio del tamaño de una población (N), que puede expresarse como: dN = k1N − k 2N dt donde k1 representa la tasa de nacimiento y k2 la tasa de mortalidad debido a la falta de recursos, etc. Una ecuación diferencial se dice que es de orden n si contiene derivadas del orden n y no derivadas de un orden mayor. dy = f ( x, y ) con la condición y(x0)= y0 dx La expresión anterior es una ecuación diferencial en la cual x es la variable independiente y y es la variable dependiente. Los matemáticos usan la notación dy d 2y y’ para referirse a , y y’’ para referirse a , etc. En el caso especial dx dx 2 cuando la variable independiente es el tiempo, entonces se usa la siguiente notación: • y •• dy d 2y ≡ , y ≡ 2 , etc. dt dt Por el momento, se abordarán únicamente las soluciones a ecuaciones diferenciales de primer orden. Esta no es una restricción severa debido a que ecuaciones diferenciales de orden mayor pueden ser expresadas en términos de un juego de ecuaciones diferenciales de primer orden. Por ejemplo: y’’ = g(x,y,y’) puede ser expresada en dos ecuaciones: z’ = g(x,y,z) y’ = z Otra restricción que se hará en este documento es la solución de ecuaciones en las cuales se conocen las condiciones iniciales; por ejemplo, cuando se sabe que el valor de y0 corresponde a x0. Método de Euler La solución de ecuaciones diferenciales puede ser ilustrada de la siguiente manera: Si se conoce el valor de y en algún punto, por ejemplo y0 = y(x0), entonces se puede graficar ese punto. También conocemos su derivada en ese punto, por lo que podemos predecir el valor de la función en x1, siempre y cuando x1 no esté muy retirado de x0., bajo el supuesto que la función puede ser aproximada mediante una línea recta. y (x2,y2) y2 y1 y0 o (x1,y1) (x0,y0) x x0 x1 x2 Se puede repetir el proceso de x1 a x2 como se muestra en el diagrama y gradualmente construir una tabla de valores subsecuentes de yi = f(xi). Estos pasos se pueden resumir en la siguiente ecuación: dy y n = y n −1 + ( xn − xn −1 ) dx n −1 Este método se conoce como el método de Euler. Obviamente, este proceso puede ser repetido tantas veces como sea necesario para poder cubrir el intervalo requerido. Sin embargo, aún tomando pasos muy pequeños, la precisión puede no ser muy alta debido a que los valores predichos pueden estar subestimados o sobrestimados, lo cual dependerá de la curvatura de la función verdadera. Este proceso ilustra el principio general de que la precisión de los cálculos computacionales dependerá de dos factores: la precisión del cálculo individual de los pasos y de la generación de errores (estabilidad) cuando se procede a calcular muchos pasos. Nótese que en la práctica, no es recomendable utilizar este método. Es ineficiente y puede ser impreciso. La solución de ecuaciones diferenciales simultáneas, puede ser obtenida si se aplica la ecuación anterior a cada una de las variables en turno, en cada paso, en un tiempo determinado. Método de Euler modificado El proceso anteriormente descrito tiene problemas obvios y se puede mejorar si se obtiene una mejor estimación de la derivada en un intervalo. Eso se puede obtener si se usa el valor de y predicho en x1 para de esta forma obtener una nueva estimación de la derivada en x1. El valor de la derivada en el intervalo x0 – x1 puede ser calculado como el valor promedio de estas dos derivadas. Si se parte de que el valor de la función y y sus derivadas f(x,y) se conocen en x0, y se quiere calcular el valor de y en x=x1=x0 + h (donde h es el tamaño del paso), el proceso se puede describir como a continuación: yip = y0 + hy’(x0,y0) yic = y0 + (h/2) (y’(x0,y0) + y’(x1,y1p) ) el que predice el que corrige En este proceso, el valor de y1p calculado se usa para corregir el proceso y así obtener un mejor valor de yic. Es obvio que se puede repetir la segunda etapa de éste método indefinidamente en un proceso iterativo; esto es, a través de remplazar el valor predicho de y1p por el último valor corregido de y1c. También, se puede usar algún método iterativo para resolver la segunda ecuación y así obtener un valor verdadero de y1c: y ic = y 0 + h ( y ' ( x0 , y 0 ) + y ' ( x1, y1 )) 2 Se debe notar que en general, yic no será el valor real de y(x1) y un número excesivo de cálculos para evaluar yic puede ser contraproducente. Probablemente dos o tres iteraciones son suficientes. Una mejor precisión se puede obtener a través de disminuir el tamaño del paso a la mitad; de esta forma, se hace que el sistema calcule con el doble de pasos. La diferencia entre los valores predichos y calculados puede usarse como un indicador de la precisión de los cálculos. Si la diferencia es muy grande, entonces se puede disminuir el tamaño del paso, si es muy pequeña entonces se puede aumentar el tamaño del paso. Método de Adams-Moulton El método de Euler modificado es un método predictor-corrector simple. Hay varios otros métodos que varían en complejidad y aplicabilidad. Aquí se describe el algoritmo del método de Adams Moulton, el cual usa los valores de los cuatro pasos previos para calcular el valor nuevo de y. Sin embargo, tiene la desventaja de restringir el tamaño de paso, debido a que cambiar el tamaño del paso requiere de calcular pasos intermedios o mantener muchos más valores. Además, hay problemas en éste método para calcular los valores iniciales. El procedimiento es el siguiente: y0, y-1, y-2, y-3 donde h= yn – yn-1 (para todas las n) Se calcula el valor nuevo de y1 de la siguiente manera: 1. Se utiliza la ecuación del predictor para generar y1p: y1p = y 0 + h (55y 0' − 59y −' 1 + 37 y −' 2 − 9y −' 3 ) 24 2. Se usa y1p para obtener una primera estimación de y1' y1' = f ( x1, y1p ) 3. Se usa la siguiente ecuación correctora para obtener una mejor estimación: y1c = y −1 + h (9y1' + 19y 0' − 5y −' 1 + y −' 2 ) 24 4. Examine 0.05(y1p – y1c) Si ninguno de los dos es muy grande (en caso contrario, hay que disminuir el tamaño de paso) o muy pequeño (aumentar el tamaño de paso) entonces: 5. Recalcular y1' con y1c: y1' = f ( x1, y1c ) 6. Repetir el proceso desde el paso 1 Métodos de Runge-Kutta Otra serie de métodos disponibles para la solución de sistemas de ecuaciones diferenciales, son conocidos como Runge-Kutta. En estos métodos los cálculos se hacen un paso a la vez. La obtención de los métodos es complicada y en general, la estimación del error es difícil. Sin embargo, una modificación al método, conocida como el método Runge-Kutta-Merson, permite estimar el error en cada paso, y es utilizada ampliamente. El algoritmo es el siguiente: k1 = hf ( xn , y n ) h k k 2 = hf ( xn + , y n + 1 ) 3 3 h k1 k 2 k3 = hf ( xn + , y n + + ) 3 6 6 h k1 k k 4 = hf ( xn + , y n + + 3 3 ) 2 8 8 k k k5 = hf ( xn + h, y n + 1 − 3 3 + 2k 4 ) 2 2 1 y n +1 = y n + (k1 + 4k 4 + k5 ) 6 Una estimación del error puede obtenerse con la siguiente ecuación: error ≈ 1 ( 2k1 − 9k3 + 8k 4 − k5 ) 30 La solución de ecuaciones simultáneas es una extensión simple. El procedimiento es como arriba, en donde se calcula primero k1 para cada variable yi antes de ir a calcular las k2, etc.