You are on page 1of 6

MÉTODO DE RUNGE KUTTA DE ORDEN 4 - RK4-

ECUAC IONES DE SEGUNDO ORDEN.


LAS FÓRMULAS PARA RESOLVER y '' (x) = f x, y (x), y ' (x) son
dy
In[2]:= F[x_, {y_, z_}] := {z, f[x, y, z]};(* z corresponde a =y'*)
dx
k1 = h F[X, {Y, Z}];
k2 = h FX + h  2, {Y, Z} + k1  2;
k3 = h FX + h  2, {Y, Z} + k2  2;
k4 = h F[X + h, {Y, Z} + k3];
 
yn - yn-1 , yn - yn-1  ⩵
 1 
Y - yn-1 , Z - yn-1  + k1 + 2 k2 + 2 k3 + k4 //. X → xn-1 , Y → yn-1 , Z → yn-1  //
6
1
FullSimplify // TraditionalForm

Out[7]//TraditionalForm=
 
{yn - yn-1 , yn - yn-1 } 
1 h 1  1   h 1  
 h2  f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + f  + xn-1 , h (h f (xn-1 , yn-1 , yn-1 ) + 2 yn-1 ) + yn-1 ,
6 2 2 2 2 4
1 h 1  1     
h f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + yn-1  + f (xn-1 , yn-1 , yn-1 ) + h yn-1 ,
2 2 2 2
1 h 1  1   h 1  
h 2  f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + f  + xn-1 , h (h f (xn-1 , yn-1 , yn-1 ) + 2 yn-1 ) +
6 2 2 2 2 4
1 h 1  1   
yn-1 , h f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + yn-1  +
2 2 2 2
1 h 1  1   
f h + xn-1 , h  h f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + yn-1  + yn-1 ,
2 2 2 2
h 1  
h f  + xn-1 , h (h f (xn-1 , yn-1 , yn-1 ) + 2 yn-1 ) + yn-1 ,
2 4
1 h 1  1     
h f  + xn-1 , h yn-1 + yn-1 , h f (xn-1 , yn-1 , yn-1 ) + yn-1  + yn-1  + yn-1  + f (xn-1 , yn-1 , yn-1 )
2 2 2 2

Así, se tienen la siguientes fórmulas de recurrencia de Runge - Kutta para



y (xn ) = yn y y ' (xn ) = yn con xn = n h :
1 h 1
 1  
yn = yn-1 + h2 f + xn-1 , h yn-1 + yn-1 , h fxn-1 , yn-1 , yn-1  + yn-1 +
6 2 2 2
h 1   1 h 1 
f + xn-1 , h h fxn-1 , yn-1 , yn-1  + 2 yn-1  + yn-1 , h f + xn-1 , h yn-1 + yn-1 ,
2 4 2 2 2
1     
h fxn-1 , yn-1 , yn-1  + yn-1 + yn-1 + fxn-1 , yn-1 , yn-1  + h yn-1
2
2 RK4-RUNGE-KUTTA DE ORDEN 4-EDOS SEGUNDO ORDEN.nb

  1 h 1  1  
yn = yn-1 + h 2 f + xn-1 , h yn-1 + yn-1 , h fxn-1 , yn-1 , yn-1  + yn-1 +
6 2 2 2
h 1  
f + xn-1 , h h fxn-1 , yn-1 , yn-1  + 2 yn-1  + yn-1 ,
2 4
1 h 1  1   
hf + xn-1 , h yn-1 + yn-1 , h fxn-1 , yn-1 , yn-1  + yn-1 + yn-1 +
2 2 2 2
1 h 1  1   
f h + xn-1 , h hf + xn-1 , h yn-1 + yn-1 , h fxn-1 , yn-1 , yn-1  + yn-1 + yn-1 + yn-1 ,
2 2 2 2
h 1   1 h 1 
hf + xn-1 , h h fxn-1 , yn-1 , yn-1  + 2 yn-1  + yn-1 , h f + xn-1 , h yn-1 + yn-1 ,
2 4 2 2 2
1     
h fxn-1 , yn-1 , yn-1  + yn-1 + yn-1 + yn-1 + fxn-1 , yn-1 , yn-1 
2
RK4-RUNGE-KUTTA DE ORDEN 4-EDOS SEGUNDO ORDEN.nb 3

PROGRAMA :
In[1]:= RK4[F_, y0_, y1_, X_, h_] := Module
{n, Y, Yp, u, YMathematica, puntos},
n = FloorX  h;
Y[0] := y0;
Yp[0] := y1;
1 1 h 1
Y[n_] := Y[n] = NY[n - 1] + h Yp[n - 1] + 2 h h f + h n - 1, Y[n - 1] + h
6 2 2 2
1
Yp[n - 1], h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] + Yp[n - 1] +
2
h 1 1
h h f + h n - 1, Y[n - 1] + h h fh n - 1, Y[n - 1], Yp[n - 1] +
2 2 2
1 h 1 1
Yp[n - 1] , h f + h n - 1, Y[n - 1] + h Yp[n - 1], h
2 2 2 2
fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] + Yp[n - 1] + Yp[n - 1] +

1
2h h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] ;
2
1 h 1
Yp[n_] := Yp[n] = N 2 h f + h n - 1, Y[n - 1] + h Yp[n - 1],
6 2 2
1
h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] +
2
h 1 1
2 h f + h n - 1, Y[n - 1] + h h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] ,
2 2 2
1 h 1
h f + h n - 1, Y[n - 1] + h Yp[n - 1],
2 2 2
1
h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] + Yp[n - 1] +
2
1 h 1
h fh + h n - 1, Y[n - 1] + h h f + h n - 1, Y[n - 1] + h Yp[n - 1],
2 2 2
1
h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] + Yp[n - 1] ,
2
h 1 1
h f + h n - 1, Y[n - 1] + h h fh n - 1, Y[n - 1], Yp[n - 1] +
2 2 2
1 h 1
Yp[n - 1] , h f + h n - 1, Y[n - 1] + h Yp[n - 1],
2 2 2
1
h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1] + Yp[n - 1] +
2
Yp[n - 1] + h fh n - 1, Y[n - 1], Yp[n - 1] + Yp[n - 1];

puntos = ArrayRGBColor[1, 1, 0], PointSize1  70, Point# - 1 h, Y[# - 1] &,


n;
YMathematica[x_] := NDSolve[u ''[t] ⩵ F[t, u[t], u '[t]] && u[0] ⩵ y0 && u '[0] ⩵ y1,
u[t], {t, 0, X}][[1, 1, 2]] //. t → x;
;
Plot[Evaluate[YMathematica[x]], {x, 0, X},
Epilog → puntos, PlotStyle → Blue, PlotRange → All];
4 RK4-RUNGE-KUTTA DE ORDEN 4-EDOS SEGUNDO ORDEN.nb

EJEMPLO 1 : RESOLVER y'' (x) + 2 y' (x) + 3 y (x) = cos


(x),
y (0) = 1, y' (0) = 1/5 para 0 <= x <= 10 con paso h = 0.25
LA SOLUCIÓN ANALÍTICA SE CONOCE :

In[8]:= DSolvey ''[x] + 2 y '[x] + 3 y[x] ⩵ Cos[x] && y[0] ⩵ 1 && y '[0] ⩵ 1  5, y[x], x // FullSimplify

Out[8]= y[x] → 1 ⅇ-x 15 Cos 2 x + 5 ⅇx Cos[x] + Sin[x] + 7 2 Sin 2 x


20

1 -x
In[9]:= g1 = Plot ⅇ 15 Cos 2 x + 5 ⅇx Cos[x] + Sin[x] + 7 2 Sin 2 x,
20
{x, 0, 10}, PlotStyle → {Orange, Thick}

1.0

0.8

0.6

0.4
Out[9]=

0.2

2 4 6 8 10

-0.2

-0.4

Apliquemos Runge - Kutta :

In[10]:= Clear[f, h, X, y0, y1];


f[x_, y_, z_] := - 2 z - 3 y + Cos[x];
y0 = 1; y1 = 1  5; X = 10; h = 0.25;
g2 = RK4[f, y0, y1, X, h]

1.0

0.8

0.6

0.4
Out[13]=

0.2

2 4 6 8 10

-0.2

-0.4
RK4-RUNGE-KUTTA DE ORDEN 4-EDOS SEGUNDO ORDEN.nb 5

In[14]:= Show[g1, g2]

1.0

0.8

0.6

0.4
Out[14]=

0.2

2 4 6 8 10

-0.2

-0.4

EJEMPLO 2 : RESOLVER
y’’(x)+0.5 y’(x)+y(x)+2 y (x)3=2 cos(3x), y(0)=1, y’(0)=0.3
para 0<=x<=10 con paso h=0.25
LA SOLUCIÓN ANALÍTICA A ESTA ECUACIÓN FVUERTEMENTE NO LINEAL SE DESCONOCE.

In[15]:= Clear[f, h, X, y0, y1];


f[x_, y_, z_] := - 0.5 z - y - 2 y3 + 2 Cos[3 x];
y0 = 1; y1 = 0.3; X = 10; h = 0.25;
RK4[f, y0, y1, X, h]
(*LA CURVA AZUL CORRESPONDE A LA SOLUCIÓN
NUMÉRICA MEDIANTE EL ALGORITMO INTERNO DE MATHEMATICA;
LOS PUNTOS AMARILLOS SE OBTIENEN A PARTIR DEL ALGORITMO DE RUNGE-KUTTA RK4*)

1.0

0.5

Out[18]=
2 4 6 8 10

-0.5

-1.0

TAREA : 1) Escoja una edo lineal no homogénea de segundo orden cuya


solución analítica Ud conoza. Proceda como en el EJEMPLO 1.
2) Resuelva el oscilador de Duffing
6 RK4-RUNGE-KUTTA DE ORDEN 4-EDOS SEGUNDO ORDEN.nb

y '' (x) + α y ' (x) + p y (x) + q y(x)3 = 2 cos (3 x),


y (0) = 2, y ' (0) = 0.5 para 0 ≤ x ≤ 10 con paso h = 0.25.
Esoja α entre 0 y 0.5;
p un número entre - 1 y 1 y q un número entre 1 y 15.
Proceda como en el Ejemplo 2.

You might also like