Вы находитесь на странице: 1из 9

Método de Runge Kutta - Fehlberg

UNIVERSIDAD NACIONAL MAYOR DE


SAN MARCOS
Universidad del Perú, DECANA DE AMÉRICA
MÉTODO DE RUNGE KUTTA - FEHLBERG

 FACULTAD DE INGENIERÍA ELECTRÓNICA Y


ELÉCTRICA

 MSC. MILTON ANGELINO AYCHO FLORES

 MÉTODOS NUMÉRICOS

 PUQUIO MANOSALVA HENRY J. / 16190213


 MIGUEL GARAY BRYAN EDUARDO / 16190234
 GOMEZ BECERRA ANTONIO

2018
Página 1|9
Método de Runge Kutta - Fehlberg

Índice:

1. Marco teórico: ........................................................................................................... 3


2. Método Runge-Kutta-Fehlberg: ................................................................................ 3
2.1 Formulas del Método Runge-Kutta-Fehlberg: ................................................... 3
2.2 Algoritmo del método de Runge-kutta-Fehlberg: .............................................. 4
3. Programa de Runge-kutta-Fehlberg (Octave): .......................................................... 5
4. Ejemplos ilustrativos: ................................................................................................ 6
4.1 Ejemplo: ............................................................................................................. 6
5. Ejemplos aplicativos: ................................................................................................ 6
5.1 Ejemplo: ............................................................................................................. 6
5.2 Ejemplo: ............................................................................................................. 8
6. Bibliografía: ............................................................................................................... 8

Página 2|9
Método de Runge Kutta - Fehlberg

Método De Runge-Kutta-Fehlberg

1. Marco teórico:

El método de Runge-Kutta son un conjunto de métodos genéricos iterativos, de


resolución numérica de ecuaciones diferenciales.

El método de Runge-Kutta posee un error local de truncamiento del mismo orden


que los métodos de Taylor, pero prescinden del cálculo tedioso y evaluación de las
derivadas superiores de la función.

Mediante métodos de orden distinto podemos predecir el error local de truncamiento


y seleccionar con esta predicción un tamaño de paso que nos controle el error
global. Uno de estos métodos es el Runge-Kutta-Fehlberg.

La idea es comenzar con un tamaño de paso moderado. Cuando se detecta que el


error esperado es mayor que Ɛ, se reduce el tamaño del paso y se vuelve a calcular el
paso actual. Cuando se detecta que el error esperado es menor que Ɛ, se mantiene el
paso actual y se amplía ligeramente el tamaño del paso en el siguiente paso.

2. Método Runge-Kutta-Fehlberg:

El método Runge-Kutta-Fehlberg consiste en ir aproximando la solución de la


ecuación mediante dos algoritmos Runge-Kutta de órdenes diferentes, para así
mantener el error acotado y hacer una buena elección de paso. Entonces usamos el
método de Runge-Kutta de 4º orden y el de 5º orden.

La ventaja de este método se da en que solo se requiere seis evaluaciones de 𝒇 por


paso. Los métodos arbitrarios de Runge Kutta de cuarto y quinto orden usados de
manera conjunta requieren cuatro y seis evaluaciones de 𝒇, respectivamente, lo cual
da diez evaluaciones de 𝒇.
2.1 Formulas del Método Runge-Kutta-Fehlberg:

𝒌𝟏 = 𝒉𝒇(𝒙𝒊 , 𝒘𝒊 )
𝒉 𝟏
𝒌𝟐 = 𝒉𝒇 (𝒙𝒊 + , 𝒘𝒊 + 𝒌𝟏 )
𝟒 𝟒
𝟑 𝟑 𝟗
𝒌𝟑 = 𝒉𝒇 (𝒙𝒊 + 𝒉, 𝒘𝒊 + 𝒌𝟏 + 𝒌 )
𝟖 𝟑𝟐 𝟑𝟐 𝟐
𝟏𝟐 𝟏𝟗𝟑𝟐 𝟕𝟐𝟎𝟎 𝟕𝟐𝟗𝟔
𝒌𝟒 = 𝒉𝒇 (𝒙𝒊 + 𝒉, 𝒘𝒊 + 𝒌𝟏 − 𝒌𝟐 + 𝒌 )
𝟏𝟑 𝟐𝟏𝟗𝟕 𝟐𝟏𝟗𝟕 𝟐𝟏𝟗𝟕 𝟑

Página 3|9
Método de Runge Kutta - Fehlberg

𝟒𝟑𝟗 𝟑𝟔𝟖𝟎 𝟖𝟒𝟓


𝒌𝟓 = 𝒉𝒇 (𝒙𝒊 + 𝒉, 𝒘𝒊 + 𝒌𝟏 − 𝟖𝒌𝟐 + 𝒌𝟑 − 𝒌 )
𝟐𝟏𝟔 𝟓𝟏𝟑 𝟒𝟏𝟎𝟒 𝟒
𝟏 𝟖 𝟑𝟓𝟒𝟒 𝟏𝟖𝟓𝟗 𝟏𝟏
𝒌𝟔 = 𝒉𝒇 (𝒙𝒊 + 𝒉, 𝒘𝒊 − 𝒌𝟏 + 𝟐𝒌𝟐 − 𝒌𝟑 + 𝒌𝟒 − 𝒌 )
𝟐 𝟐𝟕 𝟐𝟓𝟔𝟓 𝟒𝟏𝟎𝟒 𝟒𝟎 𝟓
𝟐𝟓 𝟏𝟒𝟎𝟖 𝟐𝟏𝟗𝟕 𝟏
𝒘𝒊+𝟏 = 𝒘𝒊 + 𝒌𝟏 + 𝒌𝟑 + 𝒌𝟒 − 𝒌𝟓
𝟐𝟏𝟔 𝟐𝟓𝟔𝟓 𝟒𝟏𝟎𝟒 𝟓
𝟏𝟔 𝟔𝟔𝟓𝟔 𝟐𝟖𝟓𝟔𝟏 𝟗 𝟐
𝒘
̅ 𝒊+𝟏 = 𝒘𝒊 + 𝒌𝟏 + 𝒌𝟑 + 𝒌𝟒 − 𝒌𝟓 + 𝒌
𝟏𝟑𝟓 𝟏𝟐𝟖𝟐𝟓 𝟓𝟔𝟒𝟑𝟎 𝟓𝟎 𝟓𝟓 𝟔

𝟏
𝑹= |𝒘
̅ − 𝒘𝒊+𝟏 |
𝒉 𝒊+𝟏
𝟏⁄
𝜹 = 𝟎. 𝟖𝟒(Ɛ⁄𝑹) 𝟒

Si 𝑹 ≤ Ɛ mantener 𝒘 como la solución del paso actual


y pasar al siguiente paso con el tamaño de paso 𝒉𝜹

Si 𝑹 > Ɛ recalcular el paso actual con el tamaño del paso 𝒉𝜹

2.2 Algoritmo del método de Runge-kutta-Fehlberg:

Aproxima la solución del problema de valor inicial:


𝒚′ = 𝒇(𝒙, 𝒚) 𝒂≤𝒙≤𝒃 𝒚(𝒂) = 𝒘𝟎
con un error local de truncamiento que no rebase la tolerancia especificada:

1. Entrada: 𝑓; a (cota inferior de 𝑥); b (cota superior de 𝑥); 𝑦0 (valor inicial


de la función); Ɛ (Error) y ℎ (paso inicial)
2. Hacer
𝑤 = 𝑦0
𝑥=𝑎
Mientras 𝑥 < 𝑏
i. Hacer
𝑘1 = ℎ𝑓(𝑥𝑖 , 𝑤𝑖 )
ℎ 1
𝑘2 = ℎ𝑓 (𝑥𝑖 + , 𝑤𝑖 + 𝑘1 )
4 4
3 3 9
𝑘3 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑤𝑖 + 𝑘1 + 𝑘2 )
8 32 32
12 1932 7200 7296
𝑘4 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑤𝑖 + 𝑘1 − 𝑘2 + 𝑘 )
13 2197 2197 2197 3
439 3680 845
𝑘5 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑤𝑖 + 𝑘1 − 8𝑘2 + 𝑘3 − 𝑘 )
216 513 4104 4
1 8 3544 1859 11
𝑘6 = ℎ𝑓 (𝑥𝑖 + ℎ, 𝑤𝑖 − 𝑘1 + 2𝑘2 − 𝑘3 + 𝑘4 − 𝑘5 )
2 27 2565 4104 40
25 1408 2197 1
𝑤𝑖+1 = 𝑤𝑖 + 𝑘 + 𝑘 + 𝑘 − 𝑘
216 1 2565 3 4104 4 5 5
Página 4|9
Método de Runge Kutta - Fehlberg

16 6656 28561 9 2
𝑤
̅ 𝑖+1 = 𝑤𝑖 + 𝑘1 + 𝑘3 + 𝑘4 − 𝑘5 + 𝑘6
135 12825 56430 50 55

1 1 128 2197 1 2
ii. Tome 𝑅 = | 𝑘 − 𝑘3 − 𝑘4 − 𝑘5 + 𝑘6 |
ℎ 360 1 4275 75240 50 55
1
𝑅= |𝑤
̅ − 𝑤𝑖+1 |
ℎ 𝑖+1
1
𝛿 = 0.84(Ɛ⁄𝑅 ) ⁄4
iii. Si 𝑅 ≤ Ɛ entonces
a. Hacer 𝑥 = 𝑥 + ℎ
25 1408 2197 1
𝑤=𝑤+ 𝑘1 + 𝑘3 + 𝑘4 − 𝑘5
216 2565 4104 5
b. Hacer hδ
iv. Si 𝑅 > Ɛ entonces
a. Hacer hδ
Parar mientras
3. Mostrar: 𝑤
4. Fin

3. Programa de Runge-kutta-Fehlberg (Octave):

function rkf(f,a,b,y0,h,err)
fprintf('\n\t\t METODO DE RUNGE-KUTTA-FEHLBERG\n')
f=inline(f,'x','y');
x = a;
w = y0;
i = 0;
fprintf('\n\tPaso %d: x = %6.12f, w =%18.15f\n', i, x, w);
while x<b
h = min(h, 2-x);
k1 = h*f(x,w);
k2 = h*f(x+h/4, w+k1/4);
k3 = h*f(x+3*h/8, w+3*k1/32+9*k2/32);
k4 = h*f(x+12*h/13, w+1932*k1/2197-7200*k2/2197+7296*k3/2197);
k5 = h*f(x+h, w+439*k1/216-8*k2+3680*k3/513-845*k4/4104);
k6 = h*f(x+h/2, w-8*k1/27+2*k2-3544*k3/2565+1859*k4/4104-11*k5/40);
w1 = w + 25*k1/216+1408*k3/2565+2197*k4/4104-k5/5;
w2 = w + 16*k1/135+6656*k3/12825+28561*k4/56430-9*k5/50+2*k6/55;
R = abs(w1-w2)/h;
delta = 0.84*(err/R)^(1/4);
if R<=err %Se mantiene el paso "h" y se continua iterando
x = x+h;
w = w1;
i = i+1;
fprintf('\tPaso %d: x = %6.12f, w =%18.15f\n', i, x, w);
h = delta*h;

Página 5|9
Método de Runge Kutta - Fehlberg

else %Se recalcula el paso


h = delta*h;
end
end
fprintf('\n\tLa solucion es: y(%2.1f) =%18.15f',b,w);fprintf('\n\n');

4. Ejemplos ilustrativos:

4.1 Ejemplo:

Con h=0.2:
𝒚′ = 𝒚 − 𝒙 𝟐 + 𝟏
{
𝒚(𝟎) = 𝟎. 𝟓

𝟏
La solución exacta es 𝒚 = 𝒙𝟐 + 𝟐𝒙 + 𝟏 − 𝟐 𝒆𝒙 , y estamos interesados en el
valor de 𝒚(𝟐)

RESULTADO:

>> rkf('y-x^2+1',0,2,0.5,0.2,0.00001)

METODO DE RUNGE-KUTTA-FEHLBERG:

Paso 0: x = 0.000000000000, w = 0.500000000000000


Paso 1: x = 0.200000000000, w = 0.829299076923077
Paso 2: x = 0.435327711898, w = 1.287432405787216
Paso 3: x = 0.676552908944, w = 1.827289794651997
Paso 4: x = 0.926392562196, w = 2.448301479233138
Paso 5: x = 1.190176603424, w = 3.153049280338359
Paso 6: x = 1.480595068869, w = 3.955581050460808
Paso 7: x = 1.853747748647, w = 4.952039512278185
Paso 8: x = 2.000000000000, w = 5.305486816572746

La solucion es: y(2.0) = 5.305486816572746

𝟏
 𝒚(𝟐) = 𝒙𝟐 + 𝟐𝒙 + 𝟏 − 𝟐 𝒆𝒙 = 5.305471950534677
 Note que el error es: |𝑦(2)−𝑤8 | = 0.0000148660380689947

5. Ejemplos aplicativos:

5.1 Ejemplo:

 Suponiendo que la corriente 𝒊(𝟎) = 𝟏𝟎 𝑨


Hallar la corriente 𝒊(𝟐):
Página 6|9
Método de Runge Kutta - Fehlberg

Aplicamos la Ley de Tensiones de Kirchhoff:

En cuanto al lazo 1:

𝟏 𝒅𝒊𝟏
+ 𝟐(𝒊𝟏 − 𝒊𝟐 ) = 𝟎
𝟐 𝒅𝒕
O sea
𝒅𝒊𝟏
+ 𝟒𝒊𝟏 − 𝟒𝒊𝟐 = 𝟎 … … … (𝟏)
𝒅𝒕

En cuanto al lazo 2:

𝟓
𝟔𝒊𝟐 − 𝟐𝒊𝟏 − 𝟑𝒊𝟏 = 𝟎 → 𝒊𝟐 = 𝒊 … … … (𝟐)
𝟔 𝟏
Entonces sustituyendo (2) en (1):

𝒅𝒊𝟏 𝟐
+ 𝒊 =𝟎
𝒅𝒕 𝟑 𝟏
Puesto que 𝒊𝟏 = 𝒊:
𝒅𝒊 𝟐
+ 𝒊=𝟎
𝒅𝒕 𝟑

Reordenamos la ecuación, para aplicarla al programa:

𝒅𝒊 𝟐
𝒇(𝒊, 𝒕) = =− 𝒊
𝒅𝒕 𝟑
Entonces:

>> rkf('(-2)*y/3',0,2,10,0.02,0.0000001)

METODO DE RUNGE-KUTTA-FEHLBERG

Paso 0: x = 0.000000000000, w =10.000000000000000


Paso 1: x = 0.020000000000, w = 9.867551618066479
Paso 2: x = 0.093609085784, w = 9.395013176827240
Paso 3: x = 0.167210269562, w = 8.945150833516571
Paso 4: x = 0.241720009827, w = 8.511672174634796
Página 7|9
Método de Runge Kutta - Fehlberg

Paso 5: x = 0.317145171483, w = 8.094258449798250


Paso 6: x = 0.393508544795, w = 7.692501790329560
Paso 7: x = 0.470833467853, w = 7.306001339584611
Paso 8: x = 0.549144200584, w = 6.934361331534626
Paso 9: x = 0.628465895380, w = 6.577191467448178
Paso 10: x = 0.708824683506, w = 6.234106715592580
Paso 11: x = 0.790247718090, w = 5.904727349625984
Paso 12: x = 0.872763228690, w = 5.588678945622203
Paso 13: x = 0.956400547613, w = 5.285592492017121
Paso 14: x = 1.041190214944, w = 4.995104214043285
Paso 15: x = 1.127164021157, w = 4.716855659897648
Paso 16: x = 1.214355085157, w = 4.450493669079991
Paso 17: x = 1.302797910336, w = 4.195670425030289
Paso 18: x = 1.392528489378, w = 3.952043374980901
Paso 19: x = 1.483584365530, w = 3.719275296899905
Paso 20: x = 1.576004744132, w = 3.497034241178409
Paso 21: x = 1.669830562368, w = 3.284993596876558
Paso 22: x = 1.765104630952, w = 3.082832001422696
Paso 23: x = 1.861871710868, w = 2.890233420663906
Paso 24: x = 1.960178661714, w = 2.706887086954223
Paso 25: x = 2.000000000000, w = 2.635971327701654

La solucion es: y(2.0) = 2.635971327701654

Desarrollando matemáticamente la ecuación:

𝒅𝒊 𝟐
=− 𝒊
𝒅𝒕 𝟑
Obtenemos:
𝒊(𝒕) = 𝟏𝟎𝒆−(𝟐⁄𝟑)𝒕 ; para 𝒕 > 𝟎

Entonces:
𝒊(𝟐) = 𝟏𝟎𝒆−(𝟐⁄𝟑)𝟐 = 𝟐. 𝟔𝟑𝟓𝟗𝟕𝟏𝟑𝟖𝟏𝟏𝟓𝟕𝟐𝟕

Con lo que observamos:

|𝒊(𝟐) − 𝒚(𝟐)| = 𝟎. 𝟎𝟎𝟎𝟎𝟎𝟎𝟎𝟓𝟑𝟒𝟓𝟓𝟔𝟏𝟓𝟗𝟑𝟑𝟕𝟐𝟖𝟓

5.2 Ejemplo:

6. Bibliografía:

 https://www.youtube.com/watch?v=Rs_dx8UnrP4&feature=youtu.be
 http://www.frsn.utn.edu.ar/gie/an/mnedo/34_RK.html

Página 8|9
Método de Runge Kutta - Fehlberg

 https://unac.edu.pe/images/documentos/organizacion/vri/cdcitra/Informes_Final
es_Investigacion/2011/Junio/IF_COLLANTE_HUANTO_FIME.pdf
 https://es.wikipedia.org/wiki/M%C3%A9todo_de_Runge-Kutta-Fehlberg
 https://www.youtube.com/watch?v=9g_geBN08IY
 https://es.slideshare.net/teresacr71/runge-kutta-fehlberg
 https://web.archive.org/web/20061209105041/http://math.fullerton.edu/mathews
/n2003/RungeKuttaFehlbergMod.html
 http://metodosmatlab.blogspot.com/

Página 9|9