V Solución de Ecuaciones Diferenciales Ordinarias V.1 V.1.1 Introducción Problema Una ecuación diferencial es una ecuación que involucra una función indeterminada y(t) y sus derivadas y 0 (t), y 00 (t), . . . junto con condiciones iniciales o de frontera. Una solución para la ecuación diferencial es una función que satisface la ecuación y las condiciones iniciales. Estas ecuaciones aparecen en el modelamiento matemático de todo tipo de sistemas. Por ejemplo, el ángulo θ que un péndulo forma con la vertical satisface la ecuación diferencial d2 θ g + sin θ = 0 2 dt L con las condiciones iniciales θ0 (0) = θ00 . θ(0) = θ0 , Aunque para algunas clases particulares de ecuaciones existen métodos para determinar soluciones, este no es el caso en general. Por lo tanto es importante la posibilidad de obtener soluciones numéricas. El objetivo aquı́ es estudiar algunos métodos para la solución numérica de algunas clases importantes de ecuaciones diferenciales. Aquı́ inicialmente, y la mayor parte del tiempo, nos restringimos al problema de valor inicial (PVI), de primer orden, de la forma y 0 (t) = dy(t) = f (t, y(t)) dt con y(t0 ) = y0 (∗) donde f es una función definida sobre un subcojunto apropiado de R × R y con valor en R. Una solución para (∗) en el intervalo [t0 , t0 +T ] es una función y : [t0 , t0 +T ] → R tal que y 0 (t) = f (t, y(t)) para t ∈ [t0 , t0 + T ] y y(t0 ) = y0 . Geométricamente, f (t, y) especifica para cada (t, y) en el plano t-y la pendiente que debe tener una solución que pasa por ese punto. Ejemplo. Consideremos la ecuación dy = 1 − e−t dt con V.1 y(0) = y0 . V.2 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Como la parte derecha de la ecuación depende sólo de t, se puede integrar y se obtiene y(t) = t + e−t + C donde C es una constante a determinar. Reemplazando t = 0, la condición inicial implica que 1 + C = y0 y entonces la solución es y(t) = t + e−t + y0 − 1. La siguiente figura, producida por el segmento de Matlab a continuación, muestra la curva solución y(t) para diferentes valores de la condición inicial y0 . Bajo ciertas condiciones a ser discutidas más adelante, para cada punto (t0 , y0 ) existe una curva solución única que pasa por este. Dos de estas curvas solución son disyuntas o la misma. 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 f=@(t,y0) t+exp(-t)+y0-1; figure; hold on; for i=0:5 fplot(@(t) f(t,.1*i),[0,1]); end Note que la instrucción f=@(t,y0) t+exp(-t)+y0-1 define la función f de dos variables t y y0 como se desea. Por otra parte, el primer parámetro de fplot, es la función @(t) f(t,.1*i) de una sóla variable t, la cual es la función f con la segunda variable igual a .1*i. Alternativamente, se podrı́a haber empleado la instrucción inline. V.1.2 Solución Numérica Los métodos que consideramos producen una aproximación discreta de la solución: pares (ti , wi ) donde t0 , t1 , t2 , . . . , tM con tM = t0 + T , es una discretización del intervalo de tiempo [t0 , t0 + T ] y w0 , w1 , . . . , wM es una aproximación de y0 = y(t0 ), y1 = y(t1 ), . . . , yM = y(tM ). Usualmente todos los subintervalos [tk , tk+1 ] tienen la misma longitud. Más precisamente, tk = t0 + kh para k = 0, . . . , M y donde h = T /M . En general estudiaremos métodos de diferencia de primer orden en que wk+1 está dado explı́citamente en términos de wk , k = 1, 2, . . . , M , de la siguiente forma (métodos explı́citos de un paso) wk+1 = wk + hΦ(tk , wk ) (∗) con condición inicial w0 = C0 . La ecuación (∗) es llamada ecuación de diferencias ó también fórmula de avance. La función Φ es llamada la función incremental. V.2. EXISTENCIA DE SOLUCIONES V.2 V.3 Existencia de Soluciones Definición. Sea f (t, y) una función definida en el rectángulo R = {(t, y) | a ≤ t ≤ b, c ≤ y ≤ d}. Se dice que f satisface una condición de Lipschitz con respecto a la segunda variable si existe L > 0, llamada la constante de Lipschitz, tal que para todo (t, y1 ), (t, y2 ) ∈ R se tiene que |f (t, y1 ) − f (t, y2 )| ≤ L · |y1 − y2 |. Si f satisface una condición de Lipschitz en R con respecto a la segunda variable con constante de Lipschitz L, entonces f es continua en la segunda variable: dado > 0, si tomamos δ = /L, entonces para todo (t, y1 ), (t, y2 ) ∈ R con |y1 −y2 | ≤ δ se tiene que |f (t, y1 )−f (t, y2 )| ≤ L|y1 −y2 | ≤ Lδ ≤ . En lo que sigue, fy (t, y) denota la derivada parcial de f con respecto a y. Teorema V.1 Sea f (t, y) definida en un rectángulo R como antes. Si existe L > 0 tal que para todo (t, y) ∈ R se tiene |fy (t, y)| ≤ L, entonces f satisface la condición de Lipschitz en la variable y con constante L en R. Para verificar este teorema, note que utilizando el teorema del valor medio podemos escribir, para y1 , y2 con c ≤ y1 < y2 ≤ d y algún ξ ∈ [y1 , y2 ], f (t, y1 ) − f (t, y2 ) = fy (t, ξ)(y1 − y2 ) y de aquı́ |f (t, y1 ) − f (t, y2 )| = |f (t, ξ)(y1 − y2 )| ≤ |f y(t, ξ)| · |y1 − y2 |. Puesto que |f y(t, ξ)| ≤ L entonces |f (t, y1 ) − f (t, y2 )| ≤ L · |y1 − y2 |, lo cual es la condición de Lipschitz. Ejemplo. Verifiquemos que 2 f (t, y) = y + t2 et t satisface la condición de Lipschitz con respecto a la segunda variable para t ∈ [1, 2]. Primero directamente, usando 2/t ≤ 2 para t ≥ 1, 2 2 2 2 t 2 t |f (t, y1 ) − f (t, y2 )| = y1 + t e − y2 − t e = |y1 − y2 | ≤ 2|y1 − y2 | t t t Alterativamente fy (t, y) = 2/t y entonces |fy (t, y)| ≤ 2 para t ≥ [1, 2]. Ası́, por el teorema anterior, f (t, y) es Lipschitz con respecto a la segunda variable. V.4 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo. Consideremos f (t, y) = |y|2/3 . Esta función no satisface la condición de Lipschitz con respecto a y en regiones que contengan puntos con y = 0 porque, con y2 = 0 y y1 > 0 tenemos que |f (t, y1 ) − f (t, y2 )| = |y1 |2/3 , |y1 − y2 | = |y1 | y entonces no existe constante C > 0 tal que |y1 |2/3 = |f (t, y1 ) − f (t, y2 )| ≤ C|y1 − y2 | = C|y1 |, porque esta desigualdad implicarı́a C ≥ 1/|y1 |1/3 y 1/|y1 |1/3 tiende a infinito cuando y1 tiende a 0 (recuerde que C debe ser idependiente de la selección de y1 , y2 ). La importancia de la condición de Lipschitz condición radica en el siguiente teorema (y también se usa en el análisis del error de los métodos numéricos). Teorema V.2 Sea f (t, y) continua en un rectángulo R (como antes), que satisface la condición de Lipschitz con respecto a la segunda variable en R, y sea (t0 , y0 ) ∈ R. Entonces el PVI y 0 = f (t, y), y(t0 ) = y0 , tiene una solución única en un subintervalo [t0 , t0 + δ] para algún δ > 0. Ejemplo. Si la condición de Lipschitz no se satisface, es posible que la solución al PVI no sea única. Considere por ejemplo y 0 (t) = y 2/3 , y(0) = 0. Este PVI tiene las soluciones y(t) = 0 y y(t) = (t/3)3 lo cual se puede verificar fácilmente. Otro ejemplo en que ninguna solución es trivial (zero) es o 1 np 2 t + 4y − t , y (t) = 2 0 y(2) = −1, con soluciones y(t) = −(t/2)2 y y(t) = 1 − t. V.3 Método de Euler Consideramos un PVI de la forma y 0 = f (t, y) en [t0 , t0 + T ] con y(t0 ) = C0 y para su solución numérica usamos la discretización del tiempo: tk = t0 +kh para k = 0, 1, 2, . . . , M donde h = T /M . Ası́ que tM = t0 + T (se ha dividido el intervalo de tiempo de longitud T en M subintervalos de longitud h). La aproximación de Euler se obtiene del desarrollo de Taylor y(t) = y(tk ) + y 0 (tk )(t − tk ) + y 00 (ck )(t − tk )2 , 2 donde ck ∈ [tk , t], tomando t = tk+1 , usando y 0 (tk ) = f (tk , y(tk )), y despreciando el término de de segundo orden; resulta entonces la aproximación y(tk+1 ) ≈ y(tk ) + hf (tk , y(tk )). V.3. MÉTODO DE EULER V.5 Excepto en t0 , en realidad no se conoce y(tk ) sino la aproximación previa, ası́ que esta aproximación se traduce en la siguiente regla para calcular la aproximación wk+1 de y(tk ) en términos de la aproximación wk de y(tk ): wk+1 = wk + hf (tk , wk ) par k = 0, 1, 2, . . . , M − 1, con la condición inicial w0 = C0 . Geométricamente, la solución entre tk y tk+1 es aproximada por la lı́nea con pendiente f (tk , wk ), es decir, tangente a la curva solución que pasa por (tk , wk ). yk+1 yk y1 y 0 t0 tk t1 tk+1 V.1: El segmento que conecta (tk , wk ) con (tk+1 , wk+1 ) es tangente a la curva solución que pasa por (tk , wk ). A continuación se tiene la función Matlab euler que implementa el método de Euler. Note que regresa una matriz con dos columnas que contienen los tk y wk respectivamente. function E = euler (f, a, b, ya, M) % Entrada - f es la funcion introducida como una cadena de caracteres % - a y b son los extremos izquierdo y derecho % - ya es la condicion inicial y(a) % - M es el numero de pasos % Salida - E = [T’, Y’] donde T es el vector de abscisas y % Y es el vector de ordenadas h = (b - a) / M; T = zeros(1, M+1); Y = zeros(1, M+1); T = a:h:b; Y(1) = ya; for j = 1:M Y(j+1) = Y(j) + h * feval(f, T(j), Y(j)); end E = [T’, Y’]; ’f’ Ejemplos Ejemplo 0 Considere el PVI y 0 = Ry, y(0) = y0 . La solución exacta es y(t) = y0 eRt y nos interesa conocer la aproximación que resulta de aplicar el método de Euler. Este da la recurrencia wk+1 = wk + hRwk = (1 + hR)wk , V.6 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS que tiene la solución wk = (1 + hR)k y0 . Esto es una buena aproximación si hR es suficientemente pequeño: Note que 1 + hR es la aproximación de primer orden de ehR y entonces (1 + hR)k es una aproximación de ehRk = eRt . Ejemplo 1 Usamos el método de Euler para obtener una aproximación para la solución del PVI: dy = y − t2 + 1; dt y(0) = 0.5. en [0, 2], con M = 10. Note que aquı́ f (t, y) = y − t2 + 1. Para la discretización del tiempo, los subintervalos son de longitud h = 2/10. Entonces el método de Euler resulta en la ecuación de recurrencia wk+1 = wk + h(wk − t2k + 1) = (1 + h)wk − ht2k + 0.2 = 1.2wk − 0.2t2k + 0.2 De aquı́ obtenemos los valores: w0 w1 w2 w3 = = = = .. . 0.5 1.2w0 − 0.2t20 + 0.2 = 1.2 × 0.5 − 0.2 × 02 + 0.2 = 0.6 + 0.2 = 0.8 1.2w1 − 0.2t21 + 0.2 = 1.2 × 0.8 − 0.2 × 0.22 + 0.2 = 0.96 − 0.008 + 0.2 = 1.1520 1.2w2 − 0.2t22 + 0.2 = 1.2 × 1.1520 − 0.2 × 0.42 + 0.2 = 1.3824 − 0.032 + 0.2 = 1.5504 y ası́ sucesivamente. A continuación completamos el ejercicio con MATLAB para M = 10 y M = 20. Las columnas del resultado muestran ti , wi , yi = y(ti ) y |wi − yi |. >> f=inline(’y-t^2+1’,’t’,’y’); >> g=inline(’(t+1).^2-0.5*exp(t)’); >> A10=euler(f,0,2,0.5,10); >> E10=g(A10(:,1)); >> ERR10=abs(E10-A10(:,2)); >> [A10 E10 ERR10] ans = 0 0.5000 0.5000 0 0.2000 0.8000 0.8293 0.0293 0.4000 1.1520 1.2141 0.0621 0.6000 1.5504 1.6489 0.0985 0.8000 1.9885 2.1272 0.1387 1.0000 2.4582 2.6409 0.1827 1.2000 2.9498 3.1799 0.2301 1.4000 3.4518 3.7324 0.2806 1.6000 3.9501 4.2835 0.3334 1.8000 4.4282 4.8152 0.3870 2.0000 4.8658 5.3055 0.4397 V.4. ANÁLISIS DEL ERROR V.7 >> A20=euler(f,0,2,0.5,20); >> E20=g(A20(:,1)); >> ERR20=abs(E20-A20(:,2)); >> [A20 E20 ERR20] ans = 0 0.5000 0.5000 0.1000 0.6500 0.6574 0.2000 0.8140 0.8293 0.3000 0.9914 1.0151 0.4000 1.1815 1.2141 0.5000 1.3837 1.4256 0.6000 1.5971 1.6489 0.7000 1.8208 1.8831 0.8000 2.0538 2.1272 0.9000 2.2952 2.3802 1.0000 2.5438 2.6409 1.1000 2.7981 2.9079 1.2000 3.0569 3.1799 1.3000 3.3186 3.4554 1.4000 3.5815 3.7324 1.5000 3.8437 4.0092 1.6000 4.1030 4.2835 1.7000 4.3573 4.5530 1.8000 4.6040 4.8152 1.9000 4.8405 5.0671 2.0000 5.0635 5.3055 0 0.0074 0.0153 0.0237 0.0325 0.0419 0.0519 0.0624 0.0734 0.0850 0.0971 0.1098 0.1230 0.1367 0.1509 0.1655 0.1805 0.1957 0.2111 0.2266 0.2420 La figura a continuación muestra el (valor absoluto del) error para M = 5, 10, 20, 40, 80. Note que, como se puede esperar, el error aumenta con el tiempo (se acumula) y disminuye con M (aproximadamente se reduce a la mitad al doblar M ). 0.8 5 10 20 40 80 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 V.2: Error de la solución para M = 5, 10, 20, 40, 80. V.4 Análisis del Error Se espera que el valor yk sea una buena aproximación de la solución exacta y(tk ), ası́ que nos interesa acotar la diferencia y(tk ) − yk . Dado esto, se define el error global de truncamiento o V.8 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS discretización ek en tk (acumulado en los pasos 1 a k) como ek = yk − wk (recuerde que yk = y(tk )). Para el análisis resulta conveniente definir el error local de truncación en el paso k + 1 como yk+1 − (yk + hΦ(tk , yk )) , εk+1 = h es decir, la diferencia entre la solución exacta en tk+1 y el valor predecido por el método utilizando la solución exacta en tk como punto de partida, dividida por h. En general es posible probar una cota de la forma |εk | ≤ ChN , donde C > 0 es una constante, y se escribe entonces |εk | = O(hN ). El error total acumulado E(h) = eM en las aproximaciones de t0 a tM es en general una función de f , h y el método. En el caso del método de Euler, con Φ(t, y) = f (t, y), tenemos de la ecuación al comienzo de la sección que y 00 (ck ) yk+1 − (yk + hf (tk , yk )) = h. εk+1 = h 2 Ası́ que |εk+1 | ≤ Ch donde C = maxk y 00 (ck )/2. Es decir, para el método de Euler tenemos N = 1. A continuación hacemos un análisis más detallado del error total bajo ciertas condiciones. Teorema V.3 Supongamos que se tiene una cota |εk | ≤ ChN para el error local de truncación, y que la función incremental Φ(t, y) satisface la condición de Lipschitz con constante L con respecto a y. Entonces existe una constante C 0 que depende de C y L tal que |eM | ≤ C 0 hN Prueba. Para acotar el error global en términos de los errores locales, tenemos la siguiente derivación: ek+1 = yk+1 − wk+1 = yk+1 − (wk + hΦ(tk , wk )) = (yk+1 − (yk + hΦ(tk , yk )) + (yk − wk ) + h (Φ(tk , yk ) − Φ(tk , wk )) = hεk+1 + ek + h (Φ(tk , yk ) − Φ(tk , wk )). Tomando valor absoluto, entonces, |ek+1 | ≤ h|εk+1 | + |ek | + h |Φ(tk , yk ) − Φ(tk , wk )|. Suponiendo que Φ(t, y) es Lipschitz en la segunda variable con constante L, es decir |Φ(t, y) − Φ(t, y 0 )| ≤ L |y − y 0 |, obtenemos |ek+1 | ≤ h|εk+1 | + |ek | + hL |yk − wk | = h|εk+1 | + |ek | (1 + hL). Expandiendo esta relación de recurrencia, obtenemos |ek+1 | ≤ h k X j=0 |εk+1−j |(1 + hL)j + |e0 |(1 + hL)k+1 . V.5. MÉTODO DE TAYLOR V.9 Ahora usando |εk+1−j | ≤ ChN , la suma 1 + x + x2 + · · · + xk = (xk+1 − 1)/(x − 1) para x 6= 1, e0 = 0 y la desigualdad 1 + x ≤ ex , válida para x > 0 (se obtiene truncando la serie de Taylor ex = 1 + x + x2 + · · · + xn + · · · ), obtenemos |ek+1 | ≤ ChN +1 1 + (1 + hL) + (1 + hL)2 + · · · + (1 + hL)k = ≤ C (1 + hL)k+1 − 1 = hN ((1 + hL)k+1 − 1) (1 + hL) − 1 L C N C h (1 + hL)k+1 ≤ hN ehL(k+1) . L L ChN +1 En particular, para el error final |EM | en tM se tiene |eM | ≤ C LT N e h L donde T = tM − t0 = M h es el tiempo total de la solución. Entonces |eM | ≤ C 0 hN donde C 0 = (C/L)eLT . Como ejemplo, en el método de Euler, si f (t, y) es Lipschitz en la segunda varible entonces el error total es O(h). Esto se observó en el ejemplo de la sección anterior (el error se reduce a la mitad al doblar M ). V.5 Método de Taylor El método de Euler usa la aproximación de Taylor de primer orden. En general, es posible obtener mejores aproximaciones con aproximaciones de Taylor de ordenes más altos. La expansión de Taylor de orden N alrededor de t = tk se puede escribir como y(tk + h) = y(tk ) + N X y (j) (tk ) j=1 j! hj + y (j) (tk ) N +1 h j! Las derivadas y (j) (t) que aparecen en la expansión se pueden expresar en términos de f (t, y) y sus derivadas parciales partiendo de la ecuación del PVI y 0 (t) = f (t, y) y en general y (j) (t) = dj−1 f (t, y(t)). dtj−1 Por ejemplo, d2 0 d ∂f ∂f dy y (t) = f (t, y(t)) = + = ft + f fy 2 dt dt ∂t ∂y dt donde ft = ∂f /∂t y fy = ∂f /∂y, y 00 (t) = d (ft + f fy ) dt d ∂ ∂f = (ft + f fy ) + f (ft + fy f ) dt ∂t ∂y = ftt + ft fy + f fty + f fyt + f fyy f + f fy fy = ftt + ft fy + 2f fty + f 2 fyy + f fy2 y (3) (t) = V.10 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Y ası́ sucesivamente. Es posible escribir una ecuación general, pero no lo hacemos porque el cálculo es más fácil directamente para una función f (t, y) concreta, como se verá en los ejemplos. Entonces podemos escribir y(tk + h) ≈ y(tk ) + h TN (tk , yk ) donde TN (t, y) = N X y (j) (t) j=1 j! j−1 h = N X f (j−1) (t, y) j! j=1 hj−1 Con esto, podemos escribir la ecuación de diferencias del método de Taylor para las aproximaciones wk como wk+1 = wk + h TN (tk , wk ) Ejemplo. Consideremos de nuevo el PVI y 0 = Ry con y(0) = C0 . Entonces y 0 (t) = Ry(t) y 00 (t) = Ry 0 (t) = R2 y(t) y 000 (t) = Ry 00 (t) = R3 y(t) .. . (j) y (t) = Ry (j−1) (t) = Rj y(t) .. . Entonces el método de Taylor de orden N aplicado a este PVI resulta en la fórmula wk+1 = wk + h N X R j wk j! j=1 = wk N X j=0 = w0 hj−1 (Rh)j j! N X (Rh)j j=0 !k+1 j! La suma entre paréntesis es la aproximación de Taylor de orden N para eRh y (eRh )k+1 = eRtk+1 mientras que la solución exacta del PVI da y(tk+1 ) = y0 eRtk+1 . Ejemplo. Consideremos de nuevo el PVI dy = y − t2 + 1; dt y(0) = 0.5 V.5. MÉTODO DE TAYLOR V.11 con t ∈ [0, 2] y M = 10. Como antes h = 0.2 y tk = 0.2k. Obtenemos las derivadas y 0 (t) y 00 (t) y 000 (t) y (4) (t) = = = = .. . y (j) (t) = y − t2 + 1 y 0 − 2t = y − t2 + 1 − 2t = y − t2 − 2t + 1 y 0 − 2t − 2 = y − t2 + 1 − 2t − 2 = y − t2 − 2t − 1 y 0 − 2t − 2 = y − t2 − 2t − 1 y − (t + 1)2 para j ≥ 3 El método de Taylor de segundo, tercero y cuarto orden resulta en las fórmulas h2 (wk − t2k − 2tk + 1) 2 h2 = wk + h(wk − t2k + 1) + (wk − t2k − 2tk + 1) + 2 h2 = wk + h(wk − t2k + 1) + (wk − t2k − 2tk + 1) + 2 wk+1 = wk + h(wk − t2k + 1) + wk+1 wk+1 h3 (wk − (tk + 1)2 ) 6 h3 h ((wk − (tk + 1)2 )(1 + ) 6 4 respectivamente. Por ejemplo, usando el método de cuarto orden obtenemos h2 h3 h (w0 − t20 − 2t0 + 1) + ((w0 − (t0 + 1)2 )(1 + ) 2 6 4 0.22 0.23 0.2 0.5 + 0.2(0.5 − 0 + 1) + (0.5 − 0 + 1) + (0.5 − (0 + 1)2 )(1 + ) 2 6 4 0.004 0.5 + 0.2(1.5) + 0.02(1.5) + (−0.5)(1.05) 3 0.8293 h2 h3 h w1 + h(w1 − t21 + 1) + (w1 − t21 − 2t1 + 1) + ((w1 − (t1 + 1)2 )(1 + ) 2 6 4 0.22 0.8293 + 0.2(0.8293 − 0.04 + 1) + (0.8293 − 0.04 − 0.4 + 1) + 2 0.2 0.23 (0.8293 − (0.2 + 1)2 )(1 + ) 6 4 0.22 0.23 0.8293 + 0.2(1.7893) + (1.3893) + (−0.6107)(1.05) 2 6 1.214091, w1 = w0 + h(w0 − t20 + 1) + = = = w2 = = = = etc. Usando Matlab tenemos, comparando con la solución exacta y(t) = (t + 1)2 − 0.5et V.12 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS >> df = @(t,y) [y-t^2+1,y-t^2-2*t+1,y-t^2-2*t-1,y-t^2-2*t-1]; >> T4=taylor(df,0,2,0.5,10); >> y=@(t) (t+1).^2 -0.5*exp(t); >> yy=y(T4(:,1)); >> [T4, abs(T4(:,2)-yy)] ans = 0 0.500000000000000 0 0.200000000000000 0.829300000000000 0.000001379080085 0.400000000000000 1.214091020000000 0.000003368820636 0.600000000000000 1.648946771828000 0.000006172023254 0.800000000000000 2.127239587110719 0.000010051356953 1.000000000000000 2.640874431697033 0.000015345926556 1.200000000000000 3.179964030874756 0.000022492243029 1.400000000000000 3.732432067310427 0.000032050732765 1.600000000000000 4.283528527012956 0.000044739210512 1.800000000000000 4.815237742893624 0.000061475100098 2.000000000000000 5.305555379170272 0.000083428635597 Comparamos los errores de los cuatro ordenes: >> df1 = @(t,y) [y-t^2+1,0,0,0]; >> df2 = @(t,y) [y-t^2+1,y-t^2-2*t+1,0,0]; >> df3 = @(t,y) [y-t^2+1,y-t^2-2*t+1,y-t^2-2*t-1,0]; >> T1=taylor(df1,0,2,0.5,10); >> T2=taylor(df2,0,2,0.5,10); >> T3=taylor(df3,0,2,0.5,10); >> err1=abs(T1(:,2)-yy); >> err2=abs(T2(:,2)-yy); >> err3=abs(T3(:,2)-yy); >> err4=abs(T4(:,2)-yy); >> [err1 err2 err3 err4] ans = 0 0 0 0.029298620919915 0.000701379080085 0.000034712413418 0.062087651179364 0.001712348820636 0.000084793265080 0.098540599804746 0.003135400195254 0.000155345676735 0.138749535753766 0.005103184246233 0.000252978994283 0.182683085770477 0.007786832629523 0.000386225575140 0.230130338631727 0.011406481816273 0.000566068291720 0.280626576577662 0.016244568368897 0.000806607344841 0.333355659802442 0.022662605832360 0.001125902214908 0.387022514193524 0.031122332440934 0.001547033614333 0.439687446214673 0.042212341751366 0.002099441584789 0 0.000001379080085 0.000003368820636 0.000006172023254 0.000010051356953 0.000015345926556 0.000022492243029 0.000032050732765 0.000044739210512 0.000061475100098 0.000083428635597 Implementación Matlab. Note que la función fija la longitud de df en 4; pero se puede modificar fácilmente para permitir más altos ordenes. function T4 = taylor (df, a, b, ya, M) % Entrada - df = [y’, y’’, y’’’, y’’’’] como cadena de caracteres % donde y’ = f(t, y) % - a y b son los extremos izquierdo y derecho % - ya es la condicion inicial y(a) % - M es el numero de pasos % Salida - T4 = [T’, Y’] donde T es el vector de abscisas y % Y es el vector de ordenadas h = (b - a) / M; T = zeros(1, M+1); Y = zeros(1, M+1); T = a:h:b; Y(1) = ya; for j = 1:M D = feval(df, T(j), Y(j)); ’df’ V.6. MÉTODO DE EULER MODIFICADO V.13 Y(j+1)=Y(j)+h*(D(1)+h*(D(2)/2+h*(D(3)/6+h*D(4)/24))); end T4 = [T’, Y’]; V.6 Método de Euler Modificado Continuamos considerando el mismo PVI de primer orden y 0 (t) = f (t, y(t)), y(t0 ) = y0 para t ∈ [t0 , t0 + T ]. El método se basa en eliminar la derivada mediante integración en ambos lados de la ecuación en el intervalo [tk , tk+1 ] Z tk+1 Z tk+1 0 f (t, y(t))dt y (t)dt = tk tk y entonces Z tk+1 f (t, y(t))dt. y(tk+1 ) = y(tk ) + tk Como no es posible evaluar la integral en la derecha, la idea aquı́ es reemplazarla por una aproximación. La aproximación más directamente obtenible es simplemente hf (tk , y(tk )), lo cual nos llevarı́a de nuevo a la recurrencia del método de Euler. El método de Euler modificado emplea la regla del trapecio y entonces se obtiene h y(tk+1 ) ≈ y(tk ) + (f (tk , y(tk )) + f (tk+1 , y(tk+1 ))). 2 Esto conduce a la ecuación h wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk+1 )). (∗) 2 Esta ecuación no da en forma explı́cita wk+1 en términos de wk porque wk+1 aparece a la izquierda de tal forma que puede no ser fácil despejar y obtener una ecuación explı́cita para wk+1 . Para corregir esto se emplea en la derecha la predicción w̃k+1 obtenida por el método de Euler w̃k+1 = wk + hf (tk , wk ). Entonces se obtiene h wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk + hf (tk , wk ))). 2 Análisis del Error. Para el método del trapecio el (valor absoluto del) error está acotado por |y (2) (ck )| 3 h 12 donde ck ∈ [tk , tk+1 ]. La otra fuente de error (predicción) es menor y por lo tanto se tiene que |εk | = O(h2 ) (más adelante cuando veamos los métodos de Runge-Kutta confirmaremos esto). Si el teorema sobre el error acumulado aplica, se tiene que el error total es E(h) = O(h2 ). Ası́ que podemos esperar que doblar M tiene el efecto de reducir por un factor de 4 el error. V.14 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Implementación Matlab. A continuación está la función Matlab que implementa el método de Euler modificado. function H = eulerMod (f, a, b, ya, M) % Entrada - f es la funcion introducida como una cadena de caracteres % - a y b son los extremos izquierdo y derecho % - ya es la condicion inicial y(a) % - M es el numero de pasos % Salida - H = [T’, Y’] donde T es el vector de abscisas y % Y es el vector de ordenadas h = (b - a) / M; T = zeros(1, M+1); Y = zeros(1, M+1); T = a:h:b; Y(1) = ya; for j = 1:M k1 = feval(f, T(j), Y(j)); k2 = feval(f, T(j+1), Y(j)+h*k1); Y(j+1) = Y(j) + (h / 2) * (k1 + k2); end H = [T’, Y’]; ’f’ Ejemplos Ejemplo 0 Consideremos de nuevo el PVI y 0 = Ry, y(0) = y0 . El método de Euler modificado resulta en la ecuación de recurrencia h wk+1 = wk + (Rwk + R(wk + hRwk )) 2 1 2 = 1 + hR + (hR) wk 2 que tiene solución wk = 1 1 + hR + (hR)2 2 k w0 . Note que en este caso 1 + hR + 21 (hR)2 es una aproximación de segundo orden de ehR . Ası́, es de esperar que en general el error del método de Euler modificado sea menor que el error del método de Euler. Ejemplo 1 Consideremos de nuevo el PVI dy = y − t2 + 1; dt y(0) = 0.5 con t ∈ [0, 2] y M = 10. El método de Euler modificado resulta en las ecuaciones siguientes de predicción y corrección w̃k+1 = wk + h(wk − t2k + 1) h wk+1 = wk + ((wk − t2k + 1) + (w̃k+1 − t2k+1 + 1)) 2 V.6. MÉTODO DE EULER MODIFICADO V.15 Reemplazando h = 2/10 = 0.2 y tk = hk = 0.2h, se obtiene w̃k+1 = wk + 0.2(wk − 0.04k 2 + 1) h wk+1 = wk + ((wk − 0.04k 2 + 1) + (w̃k+1 − 0.04(k + 1)2 + 1)) 2 Entonces, comenzando con y0 = 0.5, obtenemos los valores numéricos w̃1 = w0 + 0.2(w0 − 0.04 × 02 + 1) = 0.5 + 0.2(0.5 + 1) = 0.8 w1 = w0 + 0.1((w0 − 0.04 × 02 + 1) + (w̃1 − 0.04 × 12 + 1)) = 0.5 + 0.1((0.5 − 0.04 × 02 + 1) + (0.8 − 0.04 × 12 + 1)) = 0.826 w̃2 = w1 + 0.2(w1 − 0.04 × 12 + 1) = 0.826 + 0.2(0.826 − 0.04 + 1) = 1.1832 w2 = w1 + 0.1((w1 − 0.04 × 12 + 1) + (w̃2 − 0.04 × 22 + 1)) = 0.826 + 0.1((0.826 − 0.04 × 12 + 1) + (1.1832 − 0.04 × 22 + 1)) = 1.20692 .. . Ahora completamos el ejercicio con Matlab; la tabla compara el error del método de Euler modificado con el método de Euler. Y también para M = 20. >> H10=eulerMod(f,0,2,0.5,10); >> ERRH10=abs(E10-H10(:,2)); >> [H10 E10 ERRH10 ERR10] ans = 0 0.5000 0.5000 0.2000 0.8260 0.8293 0.4000 1.2069 1.2141 0.6000 1.6372 1.6489 0.8000 2.1102 2.1272 1.0000 2.6177 2.6409 1.2000 3.1496 3.1799 1.4000 3.6937 3.7324 1.6000 4.2351 4.2835 1.8000 4.7556 4.8152 2.0000 5.2331 5.3055 0 0.0033 0.0072 0.0117 0.0170 0.0232 0.0304 0.0387 0.0484 0.0596 0.0724 0 0.0293 0.0621 0.0985 0.1387 0.1827 0.2301 0.2806 0.3334 0.3870 0.4397 >> H20=eulerMod(f,0,2,0.5,20); >> ERRH20=abs(E20-H20(:,2)); >> [H20 E20 ERRH20 ERR20] ans = 0 0.5000 0.5000 0.1000 0.6570 0.6574 0.2000 0.8284 0.8293 0.3000 1.0137 1.0151 0.4000 1.2122 1.2141 0.5000 1.4232 1.4256 0.6000 1.6459 1.6489 0.7000 1.8794 1.8831 0.8000 2.1228 2.1272 0.9000 2.3750 2.3802 1.0000 2.6348 2.6409 1.1000 2.9010 2.9079 1.2000 3.1720 3.1799 1.3000 3.4464 3.4554 1.4000 3.7223 3.7324 1.5000 3.9978 4.0092 1.6000 4.2708 4.2835 0 0.0004 0.0009 0.0013 0.0019 0.0024 0.0031 0.0037 0.0044 0.0052 0.0061 0.0070 0.0079 0.0090 0.0101 0.0113 0.0126 0 0.0074 0.0153 0.0237 0.0325 0.0419 0.0519 0.0624 0.0734 0.0850 0.0971 0.1098 0.1230 0.1367 0.1509 0.1655 0.1805 V.16 V. SOLUCIÓN DE ECUACIONES 1.7000 1.8000 1.9000 2.0000 4.5390 4.7996 5.0499 5.2866 4.5530 4.8152 5.0671 5.3055 0.0140 0.0156 0.0172 0.0189 DIFERENCIALES ORDINARIAS 0.1957 0.2111 0.2266 0.2420 Ejemplo: Solución de la forma implı́cita. Regresemos a la ecuación (∗), obtenida antes de reemplazar la predicción ỹk+1 : h wk+1 = wk + (f (tk , wk ) + f (tk+1 , wk+1 )). 2 Esta es una relación implı́cita para wk+1 , la cual es posible en principio resolver para obtener wk+1 . Dependiendo de la función f , es posible que esto se pueda hacer analı́ticamente en forma fácil o no. En el caso negativo, se podrı́a usar un método numérico para determinar la solución wk+1 . Consideremos por ejemplo el PVI del Ejemplo 0 arriba. En este caso f (t, y) = Ry y obtenemos h wk+1 = wk + (Rwk + Rwk+1 ) 2 de donde wk+1 = 1 + hR/2 1 − hR/2 wk y por lo tanto wk = 1 + hR/2 1 − hR/2 k w0 Al igual que 1 + hR + (hR)2 /2, el factor que se obtiene cuando se aplica el método explı́cito de Euler modificado, el término que aparece aquı́ 1 + hR/2 1 − hR/2 también es una aproximación de segundo orden para ehR , cuando hR es suficientemente pequeño: Se puede probar que para hR ≤ 1, 1 1 1 + hR/2 1 1 1 + hR + (hR)2 + (hR)3 ≤ ≤ 1 + hR + (hR)2 + (hR)3 . 2 8 1 − hR/2 2 2 V.7 Método de Runge-Kutta Ahora estudiamos un método que permite obtener aproximaciones de órdenes más altos, al igual que el método de Taylor, pero evitando calcular derivadas. El método de Euler modificado ilustra que esto es posible en el caso de orden 2: tiene el mismo orden de aproximación que el método de Taylor de segundo orden pero sin usar y 00 (t) = df (t, y)/dt. Integrando la ecuación del PVI, como en la derivación del método de Euler modificado, podemos utilizar otras fórmulas de cuadratura, por ejemplo usando la regla del punto medio, h h y(tk+1 ) ≈ y(tk ) + hf tk + , y tk + . 2 2 V.7. MÉTODO DE RUNGE-KUTTA V.17 Para obtener una fórmula explı́cita, empleamos una predicción p̃k+1 para y tk + manera h wk+1 = wk + hf tk + , p̃k+1 2 h con p̃k+1 = wk + f (tk , wk ), 2 h 2 de la siguiente ó simplemente wk+1 h h = wk + hf tk + , wk + f (tk , wk ) 2 2 Este se denomina el método del punto medio. Al igual que el método de Euler modificado, el error de aproximación local es O(h2 ). V.7.1 Runge-Kutta de orden 2 La forma general de los métodos de Heun y del punto medio es y(tk+1 ) ≈ y(tk ) + Ahf0 + Bhf1 donde f0 = f (tk , y(tk )), f1 = f (tk + P h, y(tk ) + Qhf0 ) Las constantes A, b y P, Q se determinan de tal forma que esta aproximación coincide con la aproximación de Taylor de segundo orden. Usando la expansión de Taylor de primer orden en dos variables para f1 alrededor de (tk , y(tk )), obtenemos f1 = f (tk , y(tk )) + P hft (tk , y(tk )) + Qhf0 fy (tk , y(tk )) + C1 h2 para alguna constante C1 . Ası́ que y(tk ) + Ahf0 + Bhf1 = y(tk ) + Ahf (tk , y(tk )) + Bh(f (tk , y(tk )) + P hft (tk , y(tk )) + Qhf0 fy (tk , y(tk ))) + O(h3 ) = y(tk ) + (A + B)hf (tk , y(tk )) + BP h2 ft (tk , y(tk )) + BQh2 f0 fy (tk , y(tk )) + O(h3 ). En comparación, la aproximación de Taylor de primer orden de y(tk + h) es h2 00 y (tk ) + O(h3 ) 2 h2 = y(tk ) + hf (tk , y(tk )) + (ft (tk , y(tk )) + f (tk , y(tk ))fy (tk , y(tk ))) + O(h3 ) 2 h2 h2 = y(tk ) + hf (tk , y(tk )) + ft (tk , y(tk ) + f0 fy (tk , y(tk ))) + O(h3 ) 2 2 y(tk + h) = y(tk ) + hy 0 (tk ) + Comparando con el resultado anterior, se observa que ambos son iguales hasta orden 2 si A + B = 1, BP = 1/2, BQ = 1/2. V.18 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Dos posibles soluciones son (i) A = B = 1/2, P = Q = 1, (ii) A = 0, B = 1, P = Q = 1/2, que corresponde a los dos métodos ya discutidos. Otra posibilidad es (iii) A = 1/4, B = 3/4, P = Q = 2/3 que corresponde a h 2 2 y(tk + h) ≈ y(tk ) + f (tk , y(tk )) + 3f tk + h, y(tk ) + hf (tk , y(tk ) . 4 3 3 La fórmula de diferencias correspondiente es 2 2 h f (tk , wk ) + 3f tk + h, wk + hf (tk , wk wk+1 = wk + 4 3 3 y su error local es también O(h2 ). V.7.2 Runge-Kutta de orden 4 En forma similar se pueden derivar métodos de cuarto orden: yk+1 ≈ yk + w1 k1 + w2 k2 + w3 k3 + w4 k4 (∗) donde w1 , w2 , w3 , w4 son constantes y k1 k2 k3 k4 = = = = hf (tk , yk ) hf (tk + A1 h, yk + P1 k1 ) hf (tk + A2 h, yk + Q1 k1 + Q2 k2 ) hf (tk + A3 h, yk + R1 k1 + R2 k2 + R3 k3 ) donde A1 , A2 , A3 , P1 , Q1 , Q2 , R1 , R2 , R3 son constantes. Comparando la aproximación de Taylor de cuarto orden con la fórmula (∗) reemplazando los fi con aproximaciones de Taylor de orden tres en dos variables se encuentran condiciones para las constantes. La solución que usualmente se conoce como el método de Runge-Kutta de orden 4 es 1 yk+1 ≈ yk + (k1 + 2k2 + 2k3 + k4 ) 6 donde k1 = hf (tk , y(tk )) h 1 k2 = hf tk + , yk + k1 2 2 h 1 k3 = hf tk + , yk + k2 2 2 k4 = hf (tk + h, yk + k3 ) Finalmente, reemplazando yk con la aproximación wk , la ecuación de diferencias del método de Runge-Kutta, es 1 wk+1 = wk + (K1 + 2K2 + 2K3 + K4 ) 6 V.7. MÉTODO DE RUNGE-KUTTA V.19 donde K1 = h · f (tk , wk ) 1 h K2 = h · f tk + , wk + K1 2 2 h 1 K3 = h · f tk + , wk + K2 2 2 K4 = h · f (tk + h, wk + K3 ) Una forma alternativa de interpretar esta fórmula es como una aplicación de la regla de Simpson en la integración del PVI: Z tk+1 f (t, y(t))dt y(tk+1 ) − y(tk ) = tk h h h = f (tk , y(tk )) + 4f tk + , y tk + + f (tk+1 , y(tk+1 )) + O(h5 ) 6 2 2 El término con coeficiente 4 se divide en dos mitades con coeficiente 2, y luego se usan predicciones adecuadas para y(tk + h2 ) y y(tk+1 ). Ejemplo. Consideremos de nuevo el PVI y 0 = y − t2 + 1 en [0, 2] con y0 = 0.5 y h = 0.2. La fórmula de diferencias de Runge-Kutta para este PVI es 1 wk+1 = wk + (K1 + 2K2 + 2K3 + K4 ) 6 donde = 0.2 (wk − t2k + 1) 1 1 0.2 2 K2 = 0.2 · f tk + 0.2 , w + K = 0.2 w + K − t + + 1 k k k 2 2 1 2 1 2 1 0.2 0.2 2 1 K3 = 0.2 · f tk + 2 , wk + 2 K2 = 0.2 wk + 2 K2 − tk + 2 + 1 K4 = 0.2 · f (tk + 0.2, wk + K3 ) = 0.2 ((wk + K3 ) − (tk + 0.2)2 + 1) K1 = 0.2 · f (tk , wk ) Calculemos el primer valor como ejemplo: 1 w1 = w0 + (K1 + 2K2 + 2K3 + K4 ) 6 donde K1 = 0.2 w0 − t20 + 1 K2 = 0.2 w0 + 21 K1 − t0 + K3 = 0.2 w0 + 12 K2 − t0 + = 0.2 (0.5 + 1) 2+1 + 1 = 0.2 (0.5 + 0.1 · 1.5) − (0.1) 2 0.2 2 +1 = 0.2 (0.5 + 0.1 · 1.64) − (0.1)2 + 1 2 K4 = 0.2 (w0 + K3 ) − (t0 + 0.2)2 + 1 = 0.2 (0.5 + 0.2 · 1.654) − (0.02)2 + 1 0.2 2 = 0.2 · 1.5 = 0.2 · 1.64 = 0.2 · 1.654 = 0.2 · 1.7908 y entonces 0.2 (1.5 + 2 · 1.64 + 2 · 1.654 + 1.7908) = 0.8292933 6 Usando Matlab se obtiene lo siguiente (en las columnas 3 y 4 aparecen los errores para los métodos de Runge-Kutta y Taylor de orden 4) w1 = 0.5 + V.20 V. SOLUCIÓN DE ECUACIONES >> f=@(t,y) y-t^2+1; >> R=rk4(f,0,2,0.5,10); >> erk=abs(R(:,2)-yy); >> [R erk err4] ans = 0 0.500000000000000 0.200000000000000 0.829293333333333 0.400000000000000 1.214076210666667 0.600000000000000 1.648922017041600 0.800000000000000 2.127202684947944 1.000000000000000 2.640822692728752 1.200000000000000 3.179894170232231 1.400000000000000 3.732340072854980 1.600000000000000 4.283409498318406 1.800000000000000 4.815085694579434 2.000000000000000 5.305363000692654 DIFERENCIALES ORDINARIAS 0 0.000005287586582 0.000011440512698 0.000018582763146 0.000026850805823 0.000036393041726 0.000047368399497 0.000059943722683 0.000074289484037 0.000090573214091 0.000108949842021 0 0.000001379080085 0.000003368820636 0.000006172023254 0.000010051356953 0.000015345926556 0.000022492243029 0.000032050732765 0.000044739210512 0.000061475100098 0.000083428635597 Implementación Matlab. La siguiente es la implementación Matlab del método de RungeKutta de orden 4. function R = rk4 (f, a, b, ya, M) % Entrada - f es la funcion como cadena de caracteres ’f’ % - a y b son los extremos izquierdo y derecho % - ya es la condicion inicial y(a) % - M es el numero de pasos % Salida - R = [T’, Y’] donde T es el vector de abscisas % y Y es el vector de ordenadas h = (b - a) / M; T = zeros(1, M+1); Y = zeros(1, M+1); T = a:h:b; Y(1) = ya; for j = 1:M k1 = h * feval(f, T(j), Y(j)); k2 = h * feval(f, T(j) + h/2, Y(j) + k1/2); k3 = h * feval(f, T(j) + h/2, Y(j) + k2/2); k4 = h * feval(f, T(j) + h, Y(j) + k3); Y(j+1) = Y(j) + (k1 + 2 * k2 + 2 * k3 + k4) / 6; end R = [T’, Y’]; V.8 Sistemas de Ecuaciones Los métodos desarrollados para el PVI de primer orden pueden ser extendidos a otras ecuaciones diferenciales. Por ejemplo, sistemas de ecuaciones donde y y f se reemplazan por vectores y1 f1 y2 f2 y = .. y f (t, y) = .. : R × Rn → Rn . . yn fn y el PVI y 0 = f (t, y) por el PVI vectorial y0 (t) = f (t, y), y(t0 ) = y0 , V.8. SISTEMAS DE ECUACIONES V.21 el cual es equivalente al sistema de ecuaciones y10 (t) = f1 (t; y1 (t), y2 (t), . . . , yn (t)) y20 (t) = f2 (t; y1 (t), y2 (t), . . . , yn (t)) .. . 0 yn (t) = fn (t; y1 (t), y2 (t), . . . , yn (t)) con yk (t0 ) = y0,k i = 1, . . . , n. Solución Numérica Los métodos de solución para un PVI simple se pueden extender al caso de sistemas. Como antes se discretiza el tiempo [t0 , t0 + T ] en una secuencia de tiempos tk = t0 + kh con h = T /M donde M es el número de subintervalos y se determinan aproximaciones wi,k para yi,k = yi (tk ): y1,k y2,k .. . = y ≈ w = k k yn,k w1,k w2,k .. . wn,k En general, los wk se determinan por medio de una fórmula de diferencias para, k ≥ 0, wk+1 = wk + hΦ(tk , wk ). A continuación describimos algunas de las extensiones para sistemas. Euler. El método de Euler es wk+1 = wk + hf (tk , wk ) Euler modificado. El método del punto medio es h h h wk+1 = wk + f tk + , wk + f (tk , wk ) 2 2 2 Taylor. El método de Taylor, de segundo orden como ejemplo, es wk+1 = wk + hf (tk , wk ) + h2 0 f (tk , wk ) 2 Runge-Kutta. El método de Runge-Kutta de cuarto orden es (escribimos las ecuaciones con Ki ’s en lugar de fi ’s para evitar confusión con las funciones componentes fi cuando se escriben las ecuaciones escalares): 1 wk+1 = wk + (K1 + 2K2 + 2K3 + K4 ) 6 V.22 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS donde cada Kj es un vector (columna) con n componentes Kj = [Kj,1 Kj,2 · · · Kj,n ]T , definidos por las ecuaciones vectoriales K1 = hf (tk , wk ) 1 h K2 = hf tk + , wk + K1 2 2 h 1 K3 = hf tk + , wk + K2 2 2 K4 = hf (tk + h, wk + K3 ) Estas son ecuaciones vectoriales con n componentes. Para clarificación escribimos la forma escalar de las ecuaciones: con i = 1, 2, . . . , n, 1 wi,k+1 = wi,k + (K1,i + 2K2,i + 2K3,i + K4,i ) 6 donde K1,i = hfi (tk ; w1,k , w2,k , . . . , wn,k ) 1 1 1 h K2,i = hfi tk + ; w1,k + k1,1 , w2,k + K1,2 , . . . , wn,k + K1,n 2 2 2 2 1 1 1 h K3,i = hfi tk + ; w1,k + K2,1 , w2,k + K2,2 , . . . , wn,k + K2,n 2 2 2 2 K4,i = hfi (tk + h; w1,k + K3,1 , w2,k + K3,2 , . . . , wn,k + K3,n ) Ejemplo. En la próxima sección. Implementación Matlab. La siguiente función Matlab implementa el método de Runge-Kutta para sistemas. function [T, Z] = rks4 (F, a, b, Za, M) % Entrada - F es el sistema introducido como cadena de caracteres ’F’ % - a y b los extremos del intervalo % - Za = [x(a), y(a)] las condiciones iniciales % - M es el numero de pasos % Salida - T es el vector de pasos % - Z = [x1(t), . . ., xn(t)] donde xk(t) es la aproximacion a la % k-esima variable dependiente h = (b - a) / M; T = zeros(1, M+1); Z = zeros(M+1, length(Za)); T = a:h:b; Z(1, :) = Za; for j = 1:M k1 = h * feval(F, T(j), Z(j, :)); k2 = h * feval(F, T(j) + h/2, Z(j, :) + k1/2); k3 = h * feval(F, T(j) + h/2, Z(j, :) + k2/2); k4 = h * feval(F, T(j) + h, Z(j, :) + k3); Z(j+1, :) = Z(j, :) + (k1 + 2 * k2 + 2 * k3 + k4) / 6; end V.9. ECUACIONES DE ORDEN SUPERIOR V.9 V.23 Ecuaciones de Orden Superior Una ecuación diferencial de orden superior de la forma y (m) (t) = f (t, y, y 0 (t), y 00 (t), . . . , y (m−1) (t)), con condiciones iniciales y(t0 ) = C0 , y 0 (t0 ) = C1 , . . . , y (m−1) (t0 ) = Cm−1 se puede resolver introduciendo funciones yk (t), k = 1, . . . , m tal que yk (t) = y (k−1) (t). En particular y1 (t) = y (0) (t) = y(t). Con esto se obtiene un sistema de ecuaciones diferenciales de primer orden y10 (t) = y2 (t) y20 (t) = y3 (t) .. . 0 ym−1 (t) = ym (t) 0 ym (t) = f (t, y1 (t), y2 (t), . . . , ym (t)) con condiciones iniciales y1 (t0 ) = C0 , y2 (t0 ) = C1 , . . . , ym (t0 ) = Cm−1 . Ejemplo. Para la ecuación del péndulo g d2 θ + sin θ = 0 con θ(0) = θ0 , θ0 (0) = θ00 2 dt L definimos y1 (t) = θ(t) y2 (t) = θ0 (t) y se obtienen las ecuaciones y10 = y2 , g y20 = − sin y1 , L y1 (0) = θ0 y2 (0) = θ00 En forma vectorial, esto es y0 = f (t; y), y(0) = y0 donde y= y1 y2 , f (t, y) = y2 g − L sin y1 , y0 = θ0 θ00 V.24 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Ejemplo. Consideramos la ecuación diferencial de segundo orden y 00 − 2y 0 + y = tet − t, y(0) = 0, y 0 (0) = 1 0≤t≤1 Se desea una aproximación de y(0.1) con h = 0.1 usando diferentes métodos. Para comparación, la solución exacta es 1 y(t) = t3 et − tet + 2et − 2 6 de donde y(0.1) = 0.10000894 Sistema de primer orden equivalente: Introducimos y1 , y2 con y1 (t) = y(t), y2 (t) = y 0 (t). Con esto tenemos el sistema, para t ∈ [0, 1], y10 = y2 , y20 = 2y2 (t) − y1 (t) + tet − t, Forma vectorial: Con y1 (0) = 0 y2 (0) = 1 y : R → R2 7→ y(t) = t y1 (t) y2 (t) y f : R × R2 → R2 (t, y) 7→ f (t, y) = y2 (t) 2y2 (t) − y1 (t) + tet − t se tiene la ecuación vectorial 0 y (t) = f (t, y(t)), y(0) = y0 ≡ 0 1 Solución – Euler: La fórmula de diferencias es wk+1 = wk + hf (tk , wk ), con w0 = w1,0 w2,0 = 0 1 donde f (tk , wk ) = w2,k 2w2,k − w1,k + tk etk − tk . Para k = 0 w1 = w0 + 0.1 f (t0 , w0 ) 0 w2,0 = + 0.1 1 2w2,0 − w1,0 + 0e0 − 0 0 1 = + 0.1 1 2 0 0.1 = + 1 0.2 0.1 = 1.2 V.9. ECUACIONES DE ORDEN SUPERIOR V.25 Entonces y(0.1) y 0 (0.1) = y1 (0.1) y2 (0.1) ≈ y1 = 0.1 1.2 y y(0.1) ≈ 0.1. Solución – Punto medio: La fórmula de diferencias es h h h w1,0 0 wk+1 = wk + f tk + , wk + f (tk , wk ) , con w0 = = w 1 2 2 2 2,0 Para k = 0, w1 = = = = = = ≈ 0.1 0.1 0.1 f t0 + , w0 + f (t0 , w0 ) w0 + 2 2 2 0 0 1 + 0.05 f 0.05, + 0.05 1 1 2 0 0.05 + 0.05 f 0.05, 1 1.1 0 1.1 + 0.05 1 2(1.1) − 0.05 + 0.05e0.05 − 0.05 0 1.1 0 0.055 + 0.05 = + 1 2.1526 1 0.1076 0.055 1.1076 y(0.1) y 0 (0.1) Solución – Taylor 2do. orden: La fórmula de diferencias es wk+1 h2 = wk + h f (tk , wk ) + f 0 (tk , wk ), con w0 = 2 w1,0 w2,0 = 0 1 Calculando la derivada d y2 (t) f (t, y(t)) = dt 2y2 (t) − y1 (t) + tet − t y20 (t) = 2y20 (t) − y10 (t) + et + tet − 1 2y2 (t) − y1 (t) + tet − t = 2(2y2 (t) − y1 (t) + tet − t) − y2 (t) + et + tet − 1 2y2 (t) − y1 (t) + tet − t = 3y2 (t) − 2y1 (t) + 3tet + et − 2t − 1 0 obtenemos la fórmula de diferencias 0 f (tk , wk ) = 2w2,k − wk,1 + tk etk − tk 3w2,k − 2w1,k + 3tk etk + etk − 2tk − 1 V.26 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS Entonces w1 = 0.12 0 0 f (t0 , w0 ) = + 0.1 f (t0 , w0 ) + 1 2 0 w2,0 2w2,0 − w1,0 + t0 et0 − t0 = + 0.1 + 0.005 3w2,0 − 2w1,0 + 3t0 et0 + et0 − 2t0 − 1 1 2w2,0 − w1,0 + 0e0 − 0 0.1 2 = + 0.005 1.2 3 0.11 y(0.1) = ≈ 1.215 y 0 (0.1) Solución – Runge-Kutta. La fórmula para w1 es (usando la notación con fi ’s en lugar de Ki ’s) 1 w1,0 0 = w1 = w0 + (K1 + 2K2 + 2K3 + K4 ), con w0 = w 1 6 2,0 donde K1 = K2 = = = K3 = = = = = K4 = = = = = 1 0.1 · f (t0 , w0 ) = 0.1 · 2 0.1 1 0.1 · f t0 + , w0 + K1 2 2 0 1 0.1 · f 0.05, + 0.05 1 2 1.1 0.1 · 2.1526 1 0.1 , w0 + K2 0.1 · f t0 + 2 2 0 1.1 0.1 · f 0.05, + 0.05 1 2.1526 0.055 0.1 · f 0.05, 1.1076 1.1076 0.1 · 2(1.1076) − 0.055 + 0.05e0.05 − 0.05 1.1076 0.1 · 2.1628 0.1 · f (t0 + 0.1, w0 + 1K3 ) 0 1.1076 0.1 · f 0.1, + 0.1 1 2.1628 0.1108 0.1 · f 0.1, 1.2163 1.2163 0.1 · 2(1.2163) − 0.1108 + 0.1e0.1 − 0.1 1.2163 0.1 · 2.3323 V.10. PROBLEMAS DE CONTORNO V.27 Entonces 0.1 = + 6 0.1105 = ≈ 1.2161 w1 V.10 0 1 1 2 +2 y(0.1) y 0 (0.1) 1.1 2.1526 +2 1.1076 2.1628 + 1.2163 2.3323 Problemas de Contorno Consideramos problemas de contorno o con valores en la frontera (PVF) de la forma (∗) y 00 = f (x, y, y 0 ), a ≤ x ≤ b y(a) = α, y(b) = β condiciones de frontera Una solución del PVF (∗) es una función y(x) que satisface la ecuación diferencial en [a, b] y las condiciones de frontera. El siguiente teorema establece condiciones de existencia y unicidad para la solución del PVF (∗). Teorema V.4 Sea R = {(x, y, y 0 ) : a ≤ x ≤ b, −∞ < y, y 0 < ∞} y f (x, y, y 0 ) una función continua en R y con derivadas fy y fy0 continuas en R. Si fy (x, y, y 0 ) > 0 para todo (x, y, y 0 ) ∈ R y existe M > 0 tal que |fy0 (x, y, y 0 )| ≤ M para todo (x, y, y 0 ) ∈ R, entonces el PVF (∗) tiene una solución única y(x) en [a, b]. Ejemplo. Ejemplo. PVF Lienal. Se dice que el PVF (∗) es lineal si existen funciones p(x), q(x), r(x) tal que (∗∗) f (x, y, y 0 ) = p(x)y 0 + q(x)y + r(x). En este caso, el enunciado del teorema se simplifica de la siguiente manera: si p(x), q(x), r(x) son continuas en [a, b] y q(x) > 0 en [a, b], entonces el PVF tiene una solución única en [a, b] (note que la continuidad de p(x) en [a, b] implica que existe M > 0 tal que |p(x)| ≤ M y por lo tanto |fy0 (x, y, y 0 )| ≤ M en [a, b]). V.10.1 Método del Disparo para un PVF Lineal Dado el PVF lineal con f (x, y, y 0 ) como en (∗∗), consideramos los siguientes PVIs (PVI I) u00 (x) = p(x)u0 (x) + q(x)u(x) + r(x), a ≤ t ≤ b u(a) = α, u0 (a) = 0 condiciones iniciales V.28 V. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS y (PVI II) v 00 (x) = p(x)v 0 (t) + q(x)v(x), a ≤ t ≤ b v(a) = 0, v 0 (a) = 1 condiciones de frontera Veamos que si u(x) y v(x) son soluciones de (PVI I) y (PVI II) respectivamente entonces para cualquier constante c, y(x) = u(x) + cv(x) es una solución de y 00 (x) = p(x)y 0 (x) + q(x)y(x) + r(x): y 00 (x) = = = = = (u(x) + cv(x))00 u00 (x) + cv 00 (x) (p(x)u0 (x) + q(x)u(x) + r(x)) + c(p(x)v 0 (x) + q(x)v(x)) p(x)(u0 (x) + cv 0 (x)) + q(x)(u(x) + cv(x)) + r(x) p(x)y 0 (x) + q(x)y(x) + r(x) Ahora veamos que es posible determinar c tal que las condiciones de frontera se satisfacen. Primero, en x = a cualquier c funciona: x(a) = u(a) + cv(a) = α + c · 0 = α. En x = b, se tiene que para que y(b) = β se debe tener que u(b) + cv(b) = β y por lo tanto, asumiendo v(b) 6= 0, entonces se debe escoger c= β − u(b) v(b) Pero v(b) 6= 0 debe ser el caso si se satisfacen las condiciones del teorema, porque de lo contrario, si v(b) = 0 entonces v serı́a una solución del PVF v 00 (x) = p(x)v 0 (x) + q(x)v(x), v(a) = 0, v(b) = 0 a≤t≤b y por la unicidad de la solución se tendrı́a v ≡ 0, lo cual está en contradicción con la condición v 0 (a) = 1. 0 00 Para la solución numérica, se obtienen aproximaciones discretas w00 , w10 , . . . , wM y w000 , w100 , . . . , wM para u(x) y v(x) en [a, b] usando alguno de los métodos ya discutidos para problemas con valor inicial, y luego se determina c como 0 β − wM . c= 00 wM Con este valor, entonces la aproximación discreta w0 , w1 , . . . , wM de y(x) está dada por wk = wk0 + cwk00 k = 0, 1, . . . , M . V.10. PROBLEMAS DE CONTORNO V.29 Implementación Matlab. La función linsht requiere que se pasen los sistemas de primer orden equivalentes a los dos PVIs I y II (por supuesto serı́a más fácil pasar p(t), q(t), r(t), pero ası́ no es como la implementación funciona). function L = linsht (F1, F2, a, b, alpha, beta, M) % Entrada - F1 y F2 son los sistemas de ecuaciones de primer orden % representando los Problemas de Valor Inicial (P.V.I.’s) % - a y b son los extremos del intervalo % - alpha = x(a) y beta = x(b); las condiciones frontera % - M es el numero de pasos % Salida - L = [T’, X]; donde T’ es el vector de abscisas (M+1)x1 % y X es el vector de ordenadas (M+1) x 1 % Resolver el sistema F1 Za = [alpha, 0]; [T, Z] = rks4 (F1, a, b, Za, M); U = Z(:, 1); % Resolver el sistema F2 Za = [0, 1]; [T, Z] = rks4 (F2, a, b, Za, M); V = Z(:, 1); % Calcular la solucion al problema de valor frontera X = U + (beta - U(M+1)) * V / V(M+1); L = [T’, X];