Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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