Métodos de Runge
Transcripción
Métodos de Runge
Métodos de Runge-Kutta. Los métodos de Runge-Kutta mejoran la aproximación del método de Euler para resolver de modo aproximado el P.V.I. y ' = f Ht, yL, yHt0 L = y0 , sin necesidad de calcular derivadas de orden superior. Recordemos que, de acuerdo con la teoría, la expresión general de los métodos explícitos de s etapas de RungeKutta es: yn+1 = yn + h â bi ki s i=1 ki = f tn + ci h, yn + h â ai j k j s j=1 donde aij = 0 para j ³ i y â ai j = ci . s j=1 Para fijar ideas, un método clásico de Runge-Kutta de 2-etapas de orden 2 viene dado por el diagrama de Butcher: 0 0 . c2 c2 0 . b1 b2 donde los coeficientes que aparecen verifican el sistema de ecuaciones: b1 + b2 = 1 b2 c2 = 1 2 Así pues, existe una familia infinita de métodos de Runge-Kutta a) Método modificado de Euler, que se corresponde con yn+1 = yn + h k2 con k1 = f Htn , yn L y k2 = f Jtn + h2 , yn + h k1 N. 2 de orden 2. Los más utilizados son: b1 = 0, b2 = 1, c2 = 12 , y cuya expresión es A continuación vamos a programar dos procedimientos Mathematica, eulermod y eulermodgraf, que permiten calcular la tabla de valores correspondiente y la representación gráfica de la solución aproximada obtenida mediante el método de Euler modificado: 2 Chapter10SG_spanish.nb eulermod @f_, h_, ini_, a_, b_D := Module B 8yrk, t, y, rktable1, c<, c = Hb - aL h; yrk@0D = ini; t@n_D := a + n h; yrk@n_D := ModuleB8k1, k2<, k1 = f@t@n - 1D, yrk@n - 1DD; h h k2 = fBt@n - 1D + , yrk@n - 1D + k1F; 2 2 yrk@nD = yrk@n - 1D + h k2F; rktable1 = Table@yrk@iD, 8i, 0, c<D; Table@8t@iD, rktable1@@i + 1DD<, 8i, 0, c<D TableFormF eulermodgraf@f_, h_, ini_, a_, b_D := ModuleB8yrk, t, y, rktable1, c<, c = b-a ; h yrk@0D = ini; t@n_D := a + n h; yrk@n_D := ModuleB8k1, k2<, k1 = f@t@n - 1D, yrk@n - 1DD; F; yrk@nD = yrk@n - 1D + h k2F; 2 2 rktable1 = Table@yrk@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable1Pi + 1T<, 8i, 0, c<D, Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD; h k2 = fBt@n - 1D + h k1 , yrk@n - 1D + Print@"y@", t@cD, "D=", rktable1Pc + 1TDF donde f es la función asociada a la ecuación diferencial, h es la longitud de paso, ini es el valor de la condición inicial, a es el extremo inferior del intervalo donde vamos a calcular la aproximación y b es el extremo superior del citado intervalo. b) Método mejorado de Euler, que se corresponde con yn+1 = yn + h Hk1 +k2 L 2 con k1 = f Htn , yn L y k2 = f Htn + h, yn + h k1 L. b1 = 12 , b2 = 12 , c2 = 1, y cuya expresión es A continuación vamos a programar dos procedimientos Mathematica, mejoreuler y mejoreulergraf, que permiten calcular la tabla de valores correspondiente y la representación gráfica de la solución aproximada obtenida mediante el método mejorado de Euler: mejoreuler @f_, h_, ini_, a_, b_D := Module @ 8yrk, t, y, rktable1, c<, c = Hb - aL h; yrk@0D = ini; t@n_D := a + n h; yrk@n_D := Module@8k1, k2<, k1 = f@t@n - 1D, yrk@n - 1DD; k2 = f@t@n - 1D + h, yrk@n - 1D + h k1D; yrk@nD = yrk@n - 1D + Hh 2L Hk1 + k2LD; rktable1 = Table@yrk@iD, 8i, 0, c<D; Table@8t@iD, rktable1@@i + 1DD<, 8i, 0, c<D TableFormD Chapter10SG_spanish.nb mejoreulergraf@f_, h_, ini_, a_, b_D := ModuleB8yrk, t, y, rktable1, c<, c = 3 b-a ; h yrk@0D = ini; t@n_D := a + n h; yrk@n_D := ModuleB8k1, k2<, k1 = f@t@n - 1D, yrk@n - 1DD; h Hk1 + k2LF; 2 rktable1 = Table@yrk@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable1Pi + 1T<, 8i, 0, c<D, Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD; 1 k2 = f@t@n - 1D + h, yrk@n - 1D + h k1D; yrk@nD = yrk@n - 1D + Print@"y@", t@cD, "D=", rktable1Pc + 1TDF donde f es la función asociada a la ecuación diferencial, h es la longitud de paso, ini es el valor de la condición inicial, a es el extremo inferior del intervalo donde vamos a calcular la aproximación y b es el extremo superior del citado intervalo. Probamos ambos métodos para resolver el P.V.I. y ' = -t y + 4t , y y(0)=1 en el intervalo [0,1], con longitud de paso 0.1. 4t f@t_, y_D = -t y + ; y eulermod@f, 0.1, 1, 0, 1D 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1 1.015 1.05783 1.12286 1.20303 1.29151 1.38258 1.47185 1.55615 1.63337 1.70225 eulermodgraf@f, 0.1, 1, 0, 1D 1.7 1.6 1.5 1.4 1.3 1.2 1.1 0.2 [email protected]=1.70225 0.4 0.6 0.8 1 4 Chapter10SG_spanish.nb mejoreuler@f, 0.1, 1, 0, 1D 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1 1.015 1.05749 1.12202 1.20169 1.28977 1.38058 1.46972 1.55398 1.63123 1.70021 mejoreulergraf@f, 0.1, 1, 0, 1D 1.7 1.6 1.5 1.4 1.3 1.2 1.1 0.2 0.4 0.6 0.8 1 [email protected]=1.70021 Como se ha visto en el capítulo anterior, la solución exacta de este P.V.I. en t = 1 vale 1.70187 . En este caso, por tanto, la aproximación alcanzada por el primer método de Runge-Kutta es mejor que la obtenida por el segundo. Un método clásico de Runge-Kutta de 3-etapas de orden 3 viene dado por el diagrama de Butcher: 0 0 . . c2 c2 0 . c3 c3 - a32 a32 0 . b1 b2 b3 donde los coeficientes que aparecen verifican el sistema de ecuaciones: b1 + b2 + b3 = 1 b2 c2 + b3 c3 = 1 2 b2 c2 2 + b3 c3 2 = b3 c2 a32 = 1 3 1 6 Así pues, existe una familia infinita de métodos de Runge-Kutta de orden 3. Uno de los más utilizados es el correspondiente a y cuya expresión es yn+1 = yn + k3 = f Htn + h, yn + 2 h k2 - h k1 L. h Hk1 +4 k2 +k3 L 6 0 0 . . 1 2 1 2 0 . 1 -1 2 0 . 1 6 2 3 1 6 con k1 = f Htn , yn L, k2 = f Jtn + h2 , yn + h k1 N 2 y Chapter10SG_spanish.nb y cuya expresión es yn+1 = yn + k3 = f Htn + h, yn + 2 h k2 - h k1 L. h Hk1 +4 k2 +k3 L 6 con k1 = f Htn , yn L, k2 = f Jtn + h2 , yn + A continuación vamos a programar dos procedimientos Mathematica, h k1 N 2 5 y Runge3 y Runge3graf, que permiten calcular la tabla de valores correspondiente y la representación gráfica de la solución aproximada obtenida mediante el método de Runge-Kutta de orden 3 seleccionado: Runge3 @f_, h_, ini_, a_, b_D := Module @ 8yrk3, t, rktable3, c <, c = Hb - aL h; yrk3@0D = ini; t@n_D := a + n h; yrk3@n_D := Module@8k1, k2, k3<, k1 = f@t@n - 1D, yrk3@n - 1DD; k2 = f@t@n - 1D + h 2, yrk3@n - 1D + Hh 2L k1D; k3 = f@t@n - 1D + h, yrk3@n - 1D - h k1 + 2 h k2D; yrk3@nD = yrk3@n - 1D + h HH1 6L k1 + H2 3L k2 + H1 6L k3LD; rktable3 = Table@yrk3@iD, 8i, 0, c<D; Table@8t@iD, rktable3@@i + 1DD<, 8i, 0, c<D TableFormD Runge3graf@f_, h_, ini_, a_, b_D := ModuleB8yrk3, t, rktable3, c<, c = b-a ; yrk3@0D = ini; t@n_D := a + n h; yrk3@n_D := h h ModuleB8k1, k2, k3<, k1 = f@t@n - 1D, yrk3@n - 1DD; k2 = fBt@n - 1D + h k1 , yrk3@n - 1D + 2 k1 k3 = f@t@n - 1D + h, yrk3@n - 1D - h k1 + 2 h k2D; yrk3@nD = yrk3@n - 1D + h 2 k2 + 6 2 k3 + 3 6 F; F; rktable3 = Table@yrk3@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable3Pi + 1T<, 8i, 0, c<D, Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD; Print@"y@", t@cD, "D=", rktable3Pc + 1TDF donde f es la función asociada a la ecuación diferencial, h es la longitud de paso, ini es el valor de la condición inicial, a es el extremo inferior del intervalo donde vamos a calcular la aproximación y b es el extremo superior del citado intervalo. Probamos el método anterior con el P.V.I. y ' = -t y + 4t f@t_, y_D = -t y + ; y 4t , y y(0)=1 en el intervalo [0,1], con longitud de paso 0.1. 6 Chapter10SG_spanish.nb Runge3@f, 0.1, 1, 0, 1D 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1 1.01476 1.05708 1.12157 1.20135 1.28967 1.38082 1.47033 1.55497 1.63259 1.70187 Runge3graf@f, 0.1, 1, 0, 1D 1.7 1.6 1.5 1.4 1.3 1.2 1.1 0.2 0.4 0.6 0.8 1 [email protected]=1.70187 El método de Runge-Kutta de orden 4 más utilizado viene dado por el esquema Butcher siguiente: 0 0 1 2 1 2 1 2 0 0 1 2 0 0 0 1 0 1 6 1 3 1 3 1 6 1 y cuya expresión es yn+1 = yn + h 6 HK1 + 2 K2 + 2 K3 + K4 L K1 = f Htn , yn L K2 = f Itn + 2h , yn + K3 = f Itn + , yn + h 2 h 2 h 2 K1 M K2 M K4 = f Htn + h, yn + h K3 L A continuación vamos a programar dos procedimientos Mathematica, Runge4 y Runge4graf, que permiten calcular la tabla de valores correspondiente y la representación gráfica de la solución aproximada obtenida mediante el método de Runge-Kutta de orden 4: Chapter10SG_spanish.nb 7 Runge4 @f_, h_, ini_, a_, b_D := Module @ 8yrk4, t, rktable4, c <, c = Hb - aL h; yrk4@0D = ini; t@n_D := a + n h; yrk4@n_D := Module@8k1, k2, k3, k4 <, k1 = f@t@n - 1D, yrk4@n - 1DD; k2 = f@t@n - 1D + h 2, yrk4@n - 1D + Hh 2L k1D; k3 = f@t@n - 1D + h 2, yrk4@n - 1D + Hh 2L k2D; k4 = f@t@n - 1D + h, yrk4@n - 1D + h k3D; yrk4@nD = yrk4@n - 1D + Hh 6L Hk1 + 2 k2 + 2 k3 + k4LD; rktable4 = Table@yrk4@iD, 8i, 0, c<D; Table@8t@iD, rktable4@@i + 1DD<, 8i, 0, c<D TableFormD Runge4graf@f_, h_, ini_, a_, b_D := ModuleB8yrk4, t, rktable4, c<, c = b-a ; yrk4@0D = ini; h t@n_D := a + n h; yrk4@n_D := ModuleB8k1, k2, k3, k4<, k1 = f@t@n - 1D, yrk4@n - 1DD; h k2 = fBt@n - 1D + h k1 , yrk4@n - 1D + 2 2 F; k3 = fBt@n - 1D + h h k2 , yrk4@n - 1D + 2 2 F; h Hk1 + 2 k2 + 2 k3 + k4LF; 6 rktable4 = Table@yrk4@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable4Pi + 1T<, 8i, 0, c<D, Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD; 1 k4 = f@t@n - 1D + h, yrk4@n - 1D + h k3D; yrk4@nD = yrk4@n - 1D + Print@"y@", t@cD, "D=", rktable4Pc + 1TDF donde f es la función asociada a la ecuación diferencial, h es la longitud de paso, ini es el valor de la condición inicial, a es el extremo inferior del intervalo donde vamos a calcular la aproximación y b es el extremo superior del citado intervalo. Probamos, como es habitual, el método anterior con el P.V.I. y ' = -t y + paso 0.1. 4t f@t_, y_D = -t y + ; y Runge4@f, 0.1, 1, 0, 1D 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1 1.01482 1.05718 1.1217 1.20149 1.28981 1.38093 1.47042 1.55503 1.63261 1.70187 Runge4graf@f, 0.1, 1, 0, 1D 4t , y y(0)=1 en el intervalo [0,1], con longitud de 8 Chapter10SG_spanish.nb 1.7 1.6 1.5 1.4 1.3 1.2 1.1 0.2 0.4 0.6 0.8 1 [email protected]=1.70187 Ejemplo 1. Resolver, mediante el método de Runge-Kutta de orden 4 programado anteriormente, el P.V.I. y' = y2 -3 t2 -2 t y t2 +2 t y , y(1)=2, en el intervalo [1,2] con h=0.1 Solución Como ya vimos en el Ejemplo 1.3 anterior, Mathematica devuelve la solución exacta de este P.V.I. en términos de la solución de una ecuación implícita de difícil manejo. Borramos posibles asignaciones de las variables, definimos la función asociada al P.V.I. y aplicamos el método numérico Clear@t, y, fD y 2 - 3 t2 - 2 t y f@t_, y_D := t2 + 2 t y Runge4@f, 0.1, 2, 1, 2D 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2 1.93191 1.84842 1.75041 1.63842 1.5127 1.37319 1.21949 1.05082 0.865842 0.662386 Runge4graf@f, 0.1, 2, 1, 2D 2 1.8 1.6 1.4 1.2 1.2 0.8 1.4 1.6 1.8 2 Chapter10SG_spanish.nb 9 [email protected]=0.662386 Ejemplo 2. 20 ã -100 It-2M 2 Dado el P.V.I. y' = y - Π , yH1L = 1 , obtener el valor aproximado de la solución en t=3, usando el proced- imiento Runge4 y tomando como longitud de paso h=0.01. Analizar el comportamiento de la gráfica comparándola con la de la solución del P.V.I. y' = y , yH1L = 1 . Solución Empecemos observando que Mathematica no puede resolver este P.V.I. 20 ã-100 Ht-2L 2 DSolveB:y '@tD y@tD - , y@1D 1>, y@tD, tF Π Solve::ifun : Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information. More¼ DSolveB:y¢ @tD - 20 ã-100 H-2+tL 2 + y@tD , y@1D 1>, y@tD, tF Π Borramos posibles asignaciones de las variables, definimos la función asociada al P.V.I. y aplicamos el método numérico Clear@t, y, fD 20 ã-100 Ht-2L 2 f@t_, y_D := y - Π Runge4graf@f, 0.01, 1, 1, 3D 2 1.75 1.5 1.25 1.5 2 2.5 3 0.75 0.5 [email protected]=1.03349 Resolvemos ahora, mediante el mismo procedimiento el segundo P.V.I. f@t_, y_D := y Runge4graf@f, 0.01, 1, 1, 3D 10 Chapter10SG_spanish.nb 4 3.5 3 2.5 2 1.5 1.5 2 2.5 3 [email protected]=4. Como vemos, las dos gráficas se separan poco antes de t = 2. El brusco descenso que se produce en la gráfica de la 20 ã-100 It-2M 2 solución del primer P.V.I. se debe a la presencia del impulso Π la solución. El impulso citado se representa a continuación: 20 ã-100 Ht-2L 2 PlotB , 8t, 1, 4<, PlotRange ® AllF Π 10 8 6 4 2 1.5 2 2.5 3 3.5 4 que se resta a y y hace variar el crecimiento de