Metodo de Runge Kutta
Metodo de Runge Kutta
Metodo de Runge Kutta
c c
Métodos Numéricos
"
%"
# %+,-..
c /!c
Los métodos de Runge-Kutta logran la exactitud del procedimiento de una serie de Taylor sin
requerir el cálculo de derivadas superiores. xisten muchas variaciones, pero todas se pueden
denotar en la forma generalizada de la ecuación
s +1 = s + F( ,s ,)
Donde F( ,s ,) se conoce como la función incremento la cual puede interpretarse como una
pendiente representativa en el intervalo. La función incremento se escribe en forma general como:
1 = ( ,s )
Como cada es una evaluación funcional, esta recurrencia hace que los métodos
sean
eficientes para la programación. xisten varios tipos de métodos
al emplear diferentes
números de términos en la función incremento como la especificada por .
= 1, es el método de . Una vez se elige , se evalúan las , y al igualar la función
incremento a los términos en la serie de expansión de s. La versión de segundo orden para la
ecuación en su forma generalizada es:
Donde:
Los valores de , , y son evaluados al igualar el término de segundo orden de la ecuación
dada con la expansión de la serie de sÈ
Como se tienen tres ecuaciones con cuatro incógnitas se tiene que suponer el valor de una de ellas.
Suponiendo que se especificó un valor para , se puede resolver de manera simultánea el sistema
de ecuaciones obtenido:
Como se puede elegir un número infinito de valores para , hay un número infinito de métodos
de segundo orden.
01
s v
s vs
Donde:
y(0)=1
h = 0.25
Solución
y i 1 yi 2 h
1 ( i yi )
1 1
2 = ( i h yi 1 h)
2 2
§V mrimera iteración
6 6 6
2
6 .2
å v
ë þ , s ë å þ
1 1
2 (0 ë (0.25) , 1 ë ( 1.2)(0.25))
2 2
2 6 (0.125 ,0.85 )
2 6 0.85(0.125) 2 1.2(0.85)
2 1.006718
s1 6 1 ( 1.006718 ) 0.25
s1 6 0.748320
§V Segunda iteración
1 0 ë
1 6 0 0.25
1 0.25
k1 (x 1 , y 1 ) (0.25 , 0.748320)
1 6 0.851432
1 1
2 ( 0.25 ë (0.25) , 0.748320 ë ( 0.851432 )(0.25))
2 2
2 (0.375,0.641891)
2 0.641891(0.375) 2 1.2(0.641891)
2 6 0.680003
s2 0.578319
§V Tercera iteración
2 1 ë
2 0.25 ë 0.25
2 6 0.5
1 0.549403
1 1
2 ( 2 ë , s 2 ë 1 )
2 2
1 1
2 (0.5 ë (0.25) , 0.578319 ë ( 0.549403)(0.25))
2 2
2 (0.625 ,0.509643 )
2 6 0.4125
s 3 6 0.578319 ( 0.4125)0.25
s3 0.4752
§V Cuarta iteración
3 6 2
3 6 0.5 0.25
3 6 0.75
k 1 6 f(x 3 , y 3 ) 6 f 6 (0.75,0.47 52)
1 6 (0.4752)(0.75) 2 1.2(0.4752)
1 0.3029
1 1
2 ( 3 ë , s 3 ë 1 )
2 2
1 1
2 ( 0.75 ë (0.25) , 0.4752 ë ( 0.3029)(0.25))
2 2
2 (0.875,0.4373)
2 0.4373(0.875) 2 1.2(0.4373)
2 6 0.1900
s 4 6 0.4277
4 3 ë
4 0.75 ë 0.25
4 6 1
Vectores solución
*/
x=0;
y=1;
t=0;
Tmax=1;
h=0.25;
Iter=round ((tmax-t)/h);
Vectory=y;
Vectort=t;
For i=1:iter
K1=(y*(t^2))-(1.2*y);
K2=(y+(K1/2)*h)*(t+(h/2))^2-(1.2*(y+(K1/2)*h));
y=y+(K2*h);
t=t+h;
vectory=[vectory y];
vectort=[vectort t];
end
vectory
vectort
subplot (1,1,1);
plot(vectort,vectory,'b-p');
+! 1%È
Se resuelve el mismo problema anterior pero esta vez mediante el uso del método Runge kutta de
tercer grado, de valor inicial, en el intervalo de x=0 a x=1.
s
s 2 1.2 s
Donde:
y(0)=1
h = 0.25
Solución.
1
y i ë1 yi ë (k 1 ë 4 k 2 ë k 3 )h
6
k1 f(xi, y i )
1 1
k 2 = f(x i ë h , y i ë k 1 h)
2 2
k3 f(x i ë h , y i k 1 h ë 2 k 2 h)
§V mrimera iteración
k 1 6 f(x 0 , y 0 ) 6 f 6 (0 , 1)
1 (1)(0) 2 1.2(1)
1 6 1 .2
1 1
2 ( 0 ë , s 0 ë 1 )
2 2
1 1
2 (0 ë (0.25) , 1 ë ( 1.2)(0.25))
2 2
2 (0.125 ,0.85 )
2 6 0.85(0.125) 2 1.2(0.85)
2 6 1.0067
k 3 6 f(x o h , y o k 1 h 2 k 2 h)
3 (0.25,0 .7966 )
3 6 0.9062
1
y1 y0 ë (k 1 ë 4 k 2 ë k 3 )h
6
s1 0.7445
§V Segunda iteración
1 6 0
1 6 0 0.25
1 6 0.25
1 6 (0.7445)(0.25) 2 1.2(0.7445)
1 0.8468
1 1
2 ( 1 ë , s1 ë 1 )
2 2
1 1
2 ( 0.25 ë (0.25) , 0.7445 ë (0.8469)(0.25))
2 2
2 6 (0.375,0.6386 )
2 6 0.6386(0.375) 2 1.2(0.6386)
2 0.6765
k3 (x 1 ë h , y 1 k 1 h ë 2 k 2 h)
3 6 (0.5,0.6178 )
3 0.5870
1
y2 y1 ë (k 1 ë 4k 2 ë k 3 )h
6
s2 0 .5720
§V Tercera iteración
2 1 ë
2 0.25 ë 0.25
2 6 0.5
k 1 6 f(x 2 , y 2 ) 6 f 6 (0.5,0.572 0)
1 0.5434
1 1
2 ( 2 ë , s 2 ë 1 )
2 2
1 1
2 ( 0.5 ë (0.25) , 0.5720 ë ( 0.5434)(0.25))
2 2
2 6 (0.625,0.5041)
2 6 0.5041(0.625) 2 1.2(0.5041)
2 0.4080
k3 (x 2 ë h , y 2 k 1 h ë 2 k 2 h)
3 6 (0.75,0.5038)
3 0.3212
1
y3 y2 ë (k 1 ë 4 k 2 ë k 3 )h
6
s3 0.4679
§V Cuarta iteración
3 2 ë
3 0.5 ë 0.25
3 6 0.75
1 6 (0.4679)(0.75) 2 1.2(0.4679)
1 6 0.2986
1 1
2 ( 3 ë , s 3 ë 1 )
2 2
1 1
2 ( 0.75 ë (0.25) , 0.4679 ë ( 0.2983)(0.25))
2 2
2 (0.875,0.4306 )
2 6 0.4306(0.875) 2 1.2(0.4306)
2 6 0.1871
k 3 6 f(x 3 h , y 3 k 1 h 2 k 2 h)
3 (1,0.4489 )
3 0.4489(1) 2 1.2(0.4489)
3 6 0.0898
1
y4 y3 ë (k 1 ë 4 k 2 ë k 3 )h
6
s4 0 .4206
4 6 3
4 6 0.75 0.25
4 1
Vectores solución
*/%
x=0;
y=1;
t=0;
tmax=1;
h=0.25;
iter=(tmax-t)/h;
vectory=y;
vectort=t;
for i=1:iter
K1=(y*(t^2))-(1.2*y);
K2=(y+(K1/2)*h)*(t+(h/2))^2-(1.2*(y+(K1/2)*h));
K3=(y-(K1*h)+(2*K2*h))*((t+h)^2)-(1.2*((y-(K1*h)+(2*K2*h))));
y=y+((K1+(4*K2)+K3)/6)*h;
t=t+h;
vectory=[vectory,y];
vectort=[vectort,t];
end
vectory
vectort
subplot (1,1,1);
plot(vectort,vectory,'r-*');
Los llamados métodos de Runge-Kutta son una serie de algoritmos para calcular
aproximaciones numéricas del valor de la solución de:
U
U
1 6 0 ; 2 6 1 ;
Con muy buena precisión, sin que, para ello, sea necesario que los sean muy pequeños. l
procedimiento consta de los siguientes pasos:
%% (13 %45.1
"
77
winclude<iostream.h>
winclude<conio.h>
winclude<iomanip.h>
winclude<math.h>
return 0.5*(1+x)*pow(y,2);
i
{cout<<setiosflags(ios::showpoint | ios::fixed);
cout<<setiosflags(ios::right);
cout.precision(4);
cout<<setw(10)<<i<<setw(15)<<x<<setw(15)<<y<<endl;
int menu()
{int opc;
do
{clrscr();
cout<<setw(50)<<"-----------------\n"<<endl;
cout<<"1.Metodo de uler"<<endl;
cout<<"2.Salir"<<endl;
iwhile(opc<1 || opc>2);
return opc;
void Kutta(){
float x0,y0,xf,yf,h,k1,k2,k3,k4;
int n,i;
clrscr();
cin>>x0;
cin>>y0;
cin>>xf;
do{
cin>>n;
iwhile(n<=0);
h=(xf-x0)/n;
cout<<endl;
cout<<setw(10)<<"I"<<setw(15)<<"Xi"<<setw(15)<<"Yi"<<endl;
cout<<setw(10)<<"-"<<setw(15)<<"--"<<setw(15)<<"--"<<endl;
for(i=1;i<=n;i++)
{ k1=func(x0,y0);
k2=func(x0+h/2,y0+h*k1/2);
k3=func(x0+h/2,y0+h*k2/2);
k4=func(x0+h,y0+h*k3);
y0=y0+(k1+2*k2+2*k3+k4)*h/6;
x0=x0+h;
reportar(x0,y0,i);
i
cout<<"l valor de Yf: "<<y0<<endl;
getch();
void terminar()
cout<<"\t\t\t\t------------------\n\n";
{int opc;
do
{clrscr();
opc=menu();
clrscr();
switch(opc)
case 2: clrscr();terminar();break;
getch();
while(opc!=2);
getch();
i
#
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
*/
/**
*/
public class RK {
return //-2*x^3+12*x^2-20*x+8.5;
int opc=0;
do
try
System.out.println("=================");
System.out.println("2.Salir");
System.out.print("Opcion:");opc=Integer.parseInt(br.readLine());
iwhile(opc<1||opc>2);
return opc;
double x0,y0,xf,yf,h,k1,k2,k3,k4;
int n,i;
System.out.println("---------------------");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try
do{
iwhile(n<=0);
h=(xf-x0)/n;
System.out.println("");
for(i=1;i<=n;i++)
k1=func(x0,y0);
k2=func(x0+h/2,y0+h*k1/2);
k3=func(x0+h/2,y0+h*k2/2);
k4=func(x0+h,y0+h*k3);
y0=y0+(k1+2*k2+2*k3+k4)*h/6;
x0=x0+h;
reportar(x0,y0,i);
i
{int opc;
do
opc=menu();
switch(opc)
case 2: terminar();break;
while(opc!=2);
*
function f
h=(x1-x0)/n;
xs=x0:h:x1;
fprintf('\n''it x0 y(x1)');
for i=1:n
it=i;
x0=xs(i);
x=x0;
y=y0;
k1=h*eval(f);
x=x0+h/2;
y=y0+k1/2;
k2=h*eval(f);
x=x0+h/2;
y=y0+k2/2;
k3=h*eval(f);
x=x0+h;
y=y0+k3;
k4=h*eval(f);
y0=y0+(k1+2*k2+2*k3+k4)/6;
fprintf('\n2.0f10.6f10.6f\n',it,x0,y0);
end
1%%4
Los métodos numéricos son técnicas, donde es posible resolver los problemas por medio de
operaciones aritméticas, estos métodos implementan un buen numero de cálculos que son por
demás demasiado lentos si se hacen manualmente, gastando mucha energía en la técnica misma de
solución en vez de aplicarla sobre la definición del problema y su interpretación.
n general, estos métodos se aplican cuando se necesita un valor numérico como solución a un
problema matemático, y los procedimientos "exactos" o "analíticos" (manipulaciones algebraicas,
teoría de ecuaciones diferenciales, métodos de integración, etc.) son incapaces de dar una respuesta.
Debido a ello, son procedimientos de uso frecuente por físicos e ingenieros, y cuyo desarrollo se ha
visto favorecido por la necesidad de éstos de obtener soluciones, aunque la precisión no sea
completa. Debe recordarse que la física experimental, por ejemplo, nunca arroja valores exactos
sino intervalos que engloban la gran mayoría de resultados experimentales obtenidos, ya que no es
habitual que dos medidas del mismo fenómeno arrojen valores exactamente iguales.
%
l estudio de los métodos numéricos, es muy útil y por ende importante para quien utilice esta
herramientas para resolución de operaciones, las cuales se saben que pueden resultar complicadas,
tediosas y largas, y por más que se dominen los métodos tradicionales, estos muchas veces pueden
no ser suficientes, sin embargo esto no quiere decir que la operación sea imposible de solucionar, y
es ahí donde los métodos numéricos se aplican, y facilitan es trabajo de cierta manera.
Dentro del estudio de los métodos numéricos, se encuentran una gran variedad de aplicaciones
como lo fue el descrito en el presente trabajo referido al método de runge kutta, que tiene como
objetivo principal el análisis y solución de los problemas de valor inicial de ecuaciones diferenciales
ordinarias, siendo estos una extensión del método de uler para resolverlas, pero con un orden de
exactitud más alto que este, logrando así la exactitud del procedimiento sin requerir el cálculo de
derivadas superiores mor tal razón se toma como un método de gran facilidad y rapidez lo que lo
hace de gran importancia, ya que debido a estas características su implantación resulta más cómoda
y fácil de manejar, tomando en cuenta a la misma vez la utilización de su algoritmo resultando una
gran ventaja a nivel de su desenvolvimiento en la programación en MATLab. l mecanismo está
basado en la aplicación de ecuaciones matemáticas de gran facilidad de empleo, siendo esta otra
característica positiva. ste método es de gran aplicabilidad en diversas áreas de la industria lo que
lo hace muy usado en distintos niveles.
*68
Chapra, S y Canale, R (2003). Métodos numéricos para ingenieros. ditorial Macgraw Hill. Cuarta
edición. México.
C. Conde, . Schiavi y A.I. Muñoz. (2006). Métodos numéricos para La resolución de problemas de
valor inicial. Disponible en: http://www.escet.urjc.es/~matemati/mm_iq/tema5.pdf