Anda di halaman 1dari 10

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 Runge-
Kutta 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
1
b2 c2 = 2

Así pues, existe una familia infinita de métodos de Runge-Kutta de orden 2. Los más utilizados son:
a) Método modificado de Euler, que se corresponde con b1 = 0, b2 = 1, c2 = 12 , y cuya expresión es
yn+1 = yn + h k2 con k1 = f Htn , yn L y k2 = f Jtn + h2 , yn + N.
h k1
2

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

b-a
eulermodgraf@f_, h_, ini_, a_, b_D := ModuleB8yrk, t, y, rktable1, c<, c = ;
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;


h h k1
k2 = fBt@n - 1D + , yrk@n - 1D +

rktable1 = Table@yrk@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable1Pi + 1T<, 8i, 0, c<D,


2 2

Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD;


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 inter-
valo.

b) Método mejorado de Euler, que se corresponde con b1 = 12 , b2 = 12 , c2 = 1, y cuya expresión es


con k1 = f Htn , yn L y k2 = f Htn + h, yn + h k1 L.
h Hk1 +k2 L
yn+1 = yn + 2

A continuación vamos a programar dos procedimientos Mathematica, mejoreuler y mejoreulergraf, que per-
miten calcular la tabla de valores correspondiente y la representación gráfica de la solución aproximada obtenida medi-
ante 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 3

b-a
mejoreulergraf@f_, h_, ini_, a_, b_D := ModuleB8yrk, t, y, rktable1, c<, c = ;
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;
1
k2 = f@t@n - 1D + h, yrk@n - 1D + h k1D; yrk@nD = yrk@n - 1D +

rktable1 = Table@yrk@iD, 8i, 0, c<D; ListPlot@Table@8t@iD, rktable1Pi + 1T<, 8i, 0, c<D,


2

Joined ® True, PlotStyle ® 8RGBColor@1, 0, 0D<, PlotRange ® AllD;


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 inter-
valo.
4t
Probamos ambos métodos para resolver el P.V.I. y ' = -t y + 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 1
0.1 1.015
0.2 1.05783
0.3 1.12286
0.4 1.20303
0.5 1.29151
0.6 1.38258
0.7 1.47185
0.8 1.55615
0.9 1.63337
1. 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 0.4 0.6 0.8 1


y@1.D=1.70225
4 Chapter10SG_spanish.nb

mejoreuler@f, 0.1, 1, 0, 1D

0 1
0.1 1.015
0.2 1.05749
0.3 1.12202
0.4 1.20169
0.5 1.28977
0.6 1.38058
0.7 1.46972
0.8 1.55398
0.9 1.63123
1. 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


y@1.D=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
1
b2 c2 + b3 c3 = 2
1
b2 c2 2 + b3 c3 2 = 3
1
b3 c2 a32 = 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

0 0 . .
1 1
2 2
0 .
1 -1 2 0
1 2 1
. 6 3 6

con k1 = f Htn , yn L, k2 = f Jtn + h2 , yn + N


h Hk1 +4 k2 +k3 L h k1
y cuya expresión es yn+1 = yn + y
k3 = f Htn + h, yn + 2 h k2 - h k1 L.
6 2
Chapter10SG_spanish.nb 5

con k1 = f Htn , yn L, k2 = f Jtn + h2 , yn + N


h Hk1 +4 k2 +k3 L h k1
y cuya expresión es yn+1 = yn + y
k3 = f Htn + h, yn + 2 h k2 - h k1 L.
6 2

A continuación vamos a programar dos procedimientos Mathematica, 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 :=


b-a
ModuleB8yrk3, t, rktable3, c<, c = ; yrk3@0D = ini; t@n_D := a + n h; yrk3@n_D :=
h

F;
h h k1
ModuleB8k1, k2, k3<, k1 = f@t@n - 1D, yrk3@n - 1DD; k2 = fBt@n - 1D + , yrk3@n - 1D +
2 2

F;
k1 2 k2 k3
k3 = f@t@n - 1D + h, yrk3@n - 1D - h k1 + 2 h k2D; yrk3@nD = yrk3@n - 1D + h + +
6 3 6
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 inter-
valo.
4t
Probamos el método anterior con el P.V.I. y ' = -t y + y
, y(0)=1 en el intervalo [0,1], con longitud de paso 0.1.

4t
f@t_, y_D = -t y + ;
y
6 Chapter10SG_spanish.nb

Runge3@f, 0.1, 1, 0, 1D

0 1
0.1 1.01476
0.2 1.05708
0.3 1.12157
0.4 1.20135
0.5 1.28967
0.6 1.38082
0.7 1.47033
0.8 1.55497
0.9 1.63259
1. 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


y@1.D=1.70187

El método de Runge-Kutta de orden 4 más utilizado viene dado por el esquema Butcher siguiente:

0 0
1 1
2 2
0
1 1
2
0 2
0
1 0 0 1 0
1 1 1 1
6 3 3 6

y cuya expresión es

yn+1 = yn + h
HK1 + 2 K2 + 2 K3 + K4 L
K1 = f Htn , yn L
6

K2 = f Itn + 2h , yn + h
2
K1 M

K3 = f Itn + , yn +
h h
K2 M
K4 = f Htn + h, yn + h K3 L
2 2

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

b-a
Runge4graf@f_, h_, ini_, a_, b_D := ModuleB8yrk4, t, rktable4, c<, c = ; 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;

F; k3 = fBt@n - 1D + F;
h h k1 h h k2
k2 = fBt@n - 1D + , yrk4@n - 1D + , yrk4@n - 1D +
2 2 2 2

h Hk1 + 2 k2 + 2 k3 + k4LF;
1
k4 = f@t@n - 1D + h, yrk4@n - 1D + h k3D; yrk4@nD = yrk4@n - 1D +
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;
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 inter-
valo.
4t
Probamos, como es habitual, el método anterior con el P.V.I. y ' = -t y + y
, y(0)=1 en el intervalo [0,1], con longitud de
paso 0.1.
4t
f@t_, y_D = -t y + ;
y

Runge4@f, 0.1, 1, 0, 1D

0 1
0.1 1.01482
0.2 1.05718
0.3 1.1217
0.4 1.20149
0.5 1.28981
0.6 1.38093
0.7 1.47042
0.8 1.55503
0.9 1.63261
1. 1.70187

Runge4graf@f, 0.1, 1, 0, 1D
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


y@1.D=1.70187

Ejemplo 1.
y2 -3 t2 -2 t y
Resolver, mediante el método de Runge-Kutta de orden 4 programado anteriormente, el P.V.I. y' = , y(1)=2,
t2 +2 t y

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 2
1.1 1.93191
1.2 1.84842
1.3 1.75041
1.4 1.63842
1.5 1.5127
1.6 1.37319
1.7 1.21949
1.8 1.05082
1.9 0.865842
2. 0.662386

Runge4graf@f, 0.1, 2, 1, 2D

1.8

1.6

1.4

1.2

1.2 1.4 1.6 1.8 2


0.8
Chapter10SG_spanish.nb 9

y@2.D=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¼

20 ã-100 H-2+tL
DSolveB:y¢ @tD Š -
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

1.75

1.5

1.25

1.5 2 2.5 3
0.75

0.5

y@3.D=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

3.5

2.5

1.5

1.5 2 2.5 3
y@3.D=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 que se resta a y y hace variar el crecimiento de
Π
la solución. El impulso citado se representa a continuación:

20 ã-100 Ht-2L
, 8t, 1, 4<, PlotRange ® AllF
2

PlotB
Π

10

1.5 2 2.5 3 3.5 4