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

Documentos relacionados