Está en la página 1de 10

Mtodos de Runge-Kutta.

Los mtodos de Runge-Kutta mejoran la aproximacin del mtodo de Euler para resolver de modo aproximado el
P.V.I. y' f t, y, yt
0
y
0
, sin necesidad de calcular derivadas de orden superior.
Recordemos que, de acuerdo con la teora, la expresin general de los mtodos explcitos de s etapas de Runge-
Kutta es:
y
n1
y
n
h
i1
s
b
i
k
i
k
i
f t
n
c
i
h, y
n
h
j1
s
a
i j
k
j
donde a
ij
0 para j i y
j1
s
a
i j
c
i
.
Para fijar ideas, un mtodo clsico de Runge-Kutta de 2-etapas de orden 2 viene dado por el diagrama de
Butcher:
0 0 .
c
2
c
2
0
. b
1
b
2
donde los coeficientes que aparecen verifican el sistema de ecuaciones:
b
1
b
2
1
b
2
c
2

1
2
As pues, existe una familia infinita de mtodos de Runge-Kutta de orden 2. Los ms utilizados son:
a) Mtodo modificado de Euler, que se corresponde con b
1
0, b
2
1, c
2

1
2
, y cuya expresin es
y
n1
y
n
h k
2
con k
1
f t
n
, y
n
y k
2
f t
n

h
2
, y
n

h k
1
2
.
A continuacin vamos a programar dos procedimientos Mathematica, eulermod y eulermodgraf, que permiten
calcular la tabla de valores correspondiente y la representacin grfica de la solucin aproximada obtenida mediante el
mtodo de Euler modificado:
eulermod [f, h, ini, a, b] :
Module _ {yrk, t, y, rktable1, c},
c (b a) / h;
yrk[0] ini;
t[n] : a n h;
yrk[n] :
Module_{k1, k2},
k1 f[t[n 1], yrk[n 1]];
k2 f_t[n 1]
h
2
, yrk[n 1]
h
2
k1_;
yrk[n] yrk[n 1] h k2_;
rktable1 Table[yrk[i], {i, 0, c}];
Table[{t[i], rktable1[[i 1]]}, {i, 0, c}] // TableForm_
eulermodgraf[f, h, ini, a, b] : Module_{yrk, t, y, rktable1, c}, c
b a
h
;
yrk[0] ini; t[n] : a n h; yrk[n] : Module_{k1, k2}, k1 f[t[n 1], yrk[n 1]];
k2 f_t[n 1]
h
2
, yrk[n 1]
h k1
2
_; yrk[n] yrk[n 1] h k2_;
rktable1 Table[yrk[i], {i, 0, c}]; ListPlot[Table[{t[i], rktable1i 1]}, {i, 0, c}],
Joined True, PlotStyle {RGBColor[1, 0, 0]}, PlotRange All];
Print["y[", t[c], "]", rktable1c 1]]_
donde f es la funcin asociada a la ecuacin diferencial, h es la longitud de paso, ini es el valor de la condicin inicial, a
es el extremo inferior del intervalo donde vamos a calcular la aproximacin y b es el extremo superior del citado inter-
valo.
b) Mtodo mejorado de Euler, que se corresponde con b
1

1
2
, b
2

1
2
, c
2
1, y cuya expresin es
y
n1
y
n

h k
1
k
2

2
con k
1
f t
n
, y
n
y k
2
f t
n
h, y
n
h k
1
.
A continuacin vamos a programar dos procedimientos Mathematica, mejoreuler y mejoreulergraf, que per-
miten calcular la tabla de valores correspondiente y la representacin grfica de la solucin aproximada obtenida medi-
ante el mtodo mejorado de Euler:
mejoreuler [f, h, ini, a, b] :
Module [ {yrk, t, y, rktable1, c},
c (b a) / h;
yrk[0] ini;
t[n] : a n h;
yrk[n] :
Module[{k1, k2},
k1 f[t[n 1], yrk[n 1]];
k2 f[t[n 1] h, yrk[n 1] h k1];
yrk[n] yrk[n 1] (h / 2) (k1 k2)];
rktable1 Table[yrk[i], {i, 0, c}];
Table[{t[i], rktable1[[i 1]]}, {i, 0, c}] // TableForm]
2 Chapter10SG_spanish.nb
mejoreulergraf[f, h, ini, a, b] : Module_{yrk, t, y, rktable1, c}, c
b a
h
;
yrk[0] ini; t[n] : a n h; yrk[n] : Module_{k1, k2}, k1 f[t[n 1], yrk[n 1]];
k2 f[t[n 1] h, yrk[n 1] h k1]; yrk[n] yrk[n 1]
1
2
h (k1 k2)_;
rktable1 Table[yrk[i], {i, 0, c}]; ListPlot[Table[{t[i], rktable1i 1]}, {i, 0, c}],
Joined True, PlotStyle {RGBColor[1, 0, 0]}, PlotRange All];
Print["y[", t[c], "]", rktable1c 1]]_
donde f es la funcin asociada a la ecuacin diferencial, h es la longitud de paso, ini es el valor de la condicin inicial, a
es el extremo inferior del intervalo donde vamos a calcular la aproximacin y b es el extremo superior del citado inter-
valo.
Probamos ambos mtodos 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.
f[t, y] t y
4 t
y
;
eulermod[f, 0.1, 1, 0, 1]
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, 1]
0.2 0.4 0.6 0.8 1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
y1.1.70225
Chapter10SG_spanish.nb 3
mejoreuler[f, 0.1, 1, 0, 1]
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, 1]
0.2 0.4 0.6 0.8 1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
y1.1.70021
Como se ha visto en el captulo anterior, la solucin exacta de este P.V.I. en t 1 vale 1.70187 . En este caso, por tanto,
la aproximacin alcanzada por el primer mtodo de Runge-Kutta es mejor que la obtenida por el segundo.
Un mtodo clsico de Runge-Kutta de 3-etapas de orden 3 viene dado por el diagrama de Butcher:
0 0 . .
c
2
c
2
0 .
c
3
c
3
a
32
a
32
0
. b
1
b
2
b
3
donde los coeficientes que aparecen verifican el sistema de ecuaciones:
b
1
b
2
b
3
1
b
2
c
2
b
3
c
3

1
2
b
2
c
2
2
b
3
c
3
2

1
3
b
3
c
2
a
32

1
6
As pues, existe una familia infinita de mtodos de Runge-Kutta de orden 3. Uno de los ms utilizados es el
correspondiente a
0 0 . .
1
2
1
2
0 .
1 1 2 0
.
1
6
2
3
1
6
y cuya expresin es y
n1
y
n

h k
1
4k
2
k
3

6
con k
1
f t
n
, y
n
, k
2
f t
n

h
2
, y
n

h k
1
2
y
k
3
f t
n
h, y
n
2h k
2
h k
1
.
4 Chapter10SG_spanish.nb
y cuya expresin es y
n1
y
n

h k
1
4k
2
k
3

6
con k
1
f t
n
, y
n
, k
2
f t
n

h
2
, y
n

h k
1
2
y
k
3
f t
n
h, y
n
2h k
2
h k
1
.
A continuacin vamos a programar dos procedimientos Mathematica, Runge3 y Runge3graf, que
permiten calcular la tabla de valores correspondiente y la representacin grfica de la solucin aproximada obtenida
mediante el mtodo de Runge-Kutta de orden 3 seleccionado:
Runge3 [f, h, ini, a, b] :
Module [ {yrk3, t, rktable3, c },
c (b a) / h;
yrk3[0] ini;
t[n] : a n h;
yrk3[n] :
Module[{k1, k2, k3},
k1 f[t[n 1], yrk3[n 1]];
k2 f[t[n 1] h / 2, yrk3[n 1] (h / 2) k1];
k3 f[t[n 1] h, yrk3[n 1] h k1 2 h k2];
yrk3[n] yrk3[n 1] h ((1 / 6) k1 (2 / 3) k2 (1 / 6) k3)];
rktable3 Table[yrk3[i], {i, 0, c}];
Table[{t[i], rktable3[[i 1]]}, {i, 0, c}] // TableForm]
Runge3graf[f, h, ini, a, b] :
Module_{yrk3, t, rktable3, c}, c
b a
h
; yrk3[0] ini; t[n] : a n h; yrk3[n] :
Module_{k1, k2, k3}, k1 f[t[n 1], yrk3[n 1]]; k2 f_t[n 1]
h
2
, yrk3[n 1]
h k1
2
_;
k3 f[t[n 1] h, yrk3[n 1] h k1 2 h k2]; yrk3[n] yrk3[n 1] h
k1
6

2 k2
3

k3
6
_;
rktable3 Table[yrk3[i], {i, 0, c}]; ListPlot[Table[{t[i], rktable3i 1]}, {i, 0, c}],
Joined True, PlotStyle {RGBColor[1, 0, 0]}, PlotRange All];
Print["y[", t[c], "]", rktable3c 1]]_
donde f es la funcin asociada a la ecuacin diferencial, h es la longitud de paso, ini es el valor de la condicin inicial, a
es el extremo inferior del intervalo donde vamos a calcular la aproximacin y b es el extremo superior del citado inter-
valo.
Probamos el mtodo anterior con el P.V.I. y' t y
4t
y
, y(0)=1 en el intervalo [0,1], con longitud de paso 0.1.
f[t, y] t y
4 t
y
;
Chapter10SG_spanish.nb 5
Runge3[f, 0.1, 1, 0, 1]
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, 1]
0.2 0.4 0.6 0.8 1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
y1.1.70187
El mtodo de Runge-Kutta de orden 4 ms utilizado viene dado por el esquema Butcher siguiente:
0 0
1
2
1
2
0
1
2
0
1
2
0
1 0 0 1 0
1
6
1
3
1
3
1
6
y cuya expresin es
y
n1
y
n

h
6
K
1
2K
2
2K
3
K
4

K
1
f t
n
, y
n

K
2
f t
n

h
2
, y
n

h
2
K
1

K
3
f t
n

h
2
, y
n

h
2
K
2

K
4
f t
n
h, y
n
h K
3

A continuacin vamos a programar dos procedimientos Mathematica, Runge4 y Runge4graf, que


permiten calcular la tabla de valores correspondiente y la representacin grfica de la solucin aproximada obtenida
mediante el mtodo de Runge-Kutta de orden 4:
6 Chapter10SG_spanish.nb
Runge4 [f, h, ini, a, b] :
Module [ {yrk4, t, rktable4, c },
c (b a) / h;
yrk4[0] ini;
t[n] : a n h;
yrk4[n] :
Module[{k1, k2, k3, k4 },
k1 f[t[n 1], yrk4[n 1]];
k2 f[t[n 1] h / 2, yrk4[n 1] (h / 2) k1];
k3 f[t[n 1] h / 2, yrk4[n 1] (h / 2) k2];
k4 f[t[n 1] h, yrk4[n 1] h k3];
yrk4[n]
yrk4[n 1]
(h / 6) (k1 2 k2 2 k3 k4)];
rktable4 Table[yrk4[i], {i, 0, c}];
Table[{t[i], rktable4[[i 1]]}, {i, 0, c}] // TableForm]
Runge4graf[f, h, ini, a, b] : Module_{yrk4, t, rktable4, c}, c
b a
h
; yrk4[0] ini;
t[n] : a n h; yrk4[n] : Module_{k1, k2, k3, k4}, k1 f[t[n 1], yrk4[n 1]];
k2 f_t[n 1]
h
2
, yrk4[n 1]
h k1
2
_; k3 f_t[n 1]
h
2
, yrk4[n 1]
h k2
2
_;
k4 f[t[n 1] h, yrk4[n 1] h k3]; yrk4[n] yrk4[n 1]
1
6
h (k1 2 k2 2 k3 k4)_;
rktable4 Table[yrk4[i], {i, 0, c}]; ListPlot[Table[{t[i], rktable4i 1]}, {i, 0, c}],
Joined True, PlotStyle {RGBColor[1, 0, 0]}, PlotRange All];
Print["y[", t[c], "]", rktable4c 1]]_
donde f es la funcin asociada a la ecuacin diferencial, h es la longitud de paso, ini es el valor de la condicin inicial, a
es el extremo inferior del intervalo donde vamos a calcular la aproximacin y b es el extremo superior del citado inter-
valo.
Probamos, como es habitual, el mtodo anterior con el P.V.I. y' t y
4t
y
, y(0)=1 en el intervalo [0,1], con longitud de
paso 0.1.
f[t, y] t y
4 t
y
;
Runge4[f, 0.1, 1, 0, 1]
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, 1]
Chapter10SG_spanish.nb 7
0.2 0.4 0.6 0.8 1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
y1.1.70187
Ejemplo 1.
Resolver, mediante el mtodo de Runge-Kutta de orden 4 programado anteriormente, el P.V.I. y'
y
2
3t
2
2t y
t
2
2t y
, y(1)=2,
en el intervalo [1,2] con h=0.1
Solucin
Como ya vimos en el Ejemplo 1.3 anterior, Mathematica devuelve la solucin exacta de este P.V.I. en trminos de la
solucin de una ecuacin implcita de difcil manejo. Borramos posibles asignaciones de las variables, definimos la
funcin asociada al P.V.I. y aplicamos el mtodo numrico
Clear[t, y, f]
f[t, y] :
y
2
3t
2
2t y
t
2
2t y
Runge4[f, 0.1, 2, 1, 2]
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, 2]
1.2 1.4 1.6 1.8 2
0.8
1.2
1.4
1.6
1.8
2
8 Chapter10SG_spanish.nb
y2.0.662386
Ejemplo 2.
Dado el P.V.I. y' y
20
100 t2
2

, y1 1 , obtener el valor aproximado de la solucin en t=3, usando el proced-


imiento Runge4 y tomando como longitud de paso h=0.01. Analizar el comportamiento de la grfica comparndola con
la de la solucin del P.V.I. y' y , y1 1 .
Solucin
Empecemos observando que Mathematica no puede resolver este P.V.I.
DSolve__y'[t] y[t]
20
100(t2)
2

, y[1] 1_, y[t], t_


Solve::ifun :
Inverse functions are being used by Solve, so some solutions may not be found;
use Reduce for complete solution information. More
DSolvey

t
20
100 2t
2

yt , y1 1, yt, t
Borramos posibles asignaciones de las variables, definimos la funcin asociada al P.V.I. y aplicamos el mtodo numrico
Clear[t, y, f]
f[t, y] : y
20
100(t2)
2

Runge4graf[f, 0.01, 1, 1, 3]
1.5 2 2.5 3
0.5
0.75
1.25
1.5
1.75
2
y3.1.03349
Resolvemos ahora, mediante el mismo procedimiento el segundo P.V.I.
f[t, y] : y
Runge4graf[f, 0.01, 1, 1, 3]
Chapter10SG_spanish.nb 9
1.5 2 2.5 3
1.5
2
2.5
3
3.5
4
y3.4.
Como vemos, las dos grficas se separan poco antes de t = 2. El brusco descenso que se produce en la grfica de la
solucin del primer P.V.I. se debe a la presencia del impulso
20
100 t2
2

que se resta a y y hace variar el crecimiento de


la solucin. El impulso citado se representa a continuacin:
Plot_
20
100 (t2)
2

, {t, 1, 4}, PlotRange All_


1.5 2 2.5 3 3.5 4
2
4
6
8
10
10 Chapter10SG_spanish.nb

También podría gustarte