Beruflich Dokumente
Kultur Dokumente
PROYECTO DE INVESTIGACION
El Metodo de Runge Kutta
Autor:
Alumno: Jos Manuel Limachi Chvez
Docente:
Braulio Gutierrez Pari
Juliaca 2011
RUNGE-KUTTA
El mtodo de Runge Kutta es un mtodo numrico de resolucin de ecuaciones diferenciales que
surge como una mejora del mtodo de Euler. El mtodo de Euler se puede considerar como un
mtodo de Runge Kutta de primer orden, el de Heun, es un mtodo de Runge Kutta de orden dos.
Los mtodos de Runge-Kutta logran la exactitud del procedimiento de una serie de Taylor sin
requerir el clculo de derivadas superiores. Existen muchas variaciones, pero todas se pueden
denotar en la forma generalizada de la ecuacin
yi + 1 = yi + F(xi,yi,h)h
Donde F(xi,yi,h) se conoce como la funcin incremento la cual puede interpretarse como una
pendiente representativa en el intervalo. La funcin incremento se escribe en forma general como:
F = a1k1 + a2k2 +.+ ankn
Donde las a son constantes y las k son:
k1 = f(xi,yi)
k2 = f(xi + p1h,yi + q11k1h)
k3 = f(xi + p2h,yi + q21k1h + q22k2h)
kn = f(xi + pnh,yi + q2n-1k1h + qn-1,2k2h + . + qn-1,n-1kn-1h)
Donde las p y q son constantes.
Como cada k es una evaluacin funcional, esta recurrencia hace que los mtodos Runge-Kutta sean
eficientes para la programacin. Existen varios tipos de mtodos Runge-Kutta al emplear diferentes
nmeros de trminos en la funcin incremento como la especificada por n.
n = 1, es el mtodo de Euler. Una vez se elige n, se evalan las a, p y q al igualar la funcin
incremento a los trminos en la serie de expansin de Taylor. La versin de segundo orden para la
ecuacin en su forma generalizada es:
Donde:
Los valores de a1, a2, p1 y q11 son evaluados al igualar el trmino de segundo orden de la ecuacin
dada con la expansin de la serie de Taylor.
Desarrollando tres ecuaciones para evaluar las cuatro incgnitas:
Como se tienen tres ecuaciones con cuatro incgnitas se tiene que suponer el valor de una de ellas.
Suponiendo que se especific un valor para a2, se puede resolver de manera simultnea el sistema
de ecuaciones obtenido:
Como se puede elegir un nmero infinito de valores para a2, hay un nmero infinito de mtodos
Runge-Kutta de segundo orden.
a2 = 1/2: Mtodo de Heun con un solo corrector, donde:
Siguiendo el mismo razonamiento para n = 3, o sea, Runge-Kutta de tercer orden, el resultado son
seis ecuaciones con ocho incgnitas, por lo tanto se deben suponer dos valores con antelacin para
poder
desarrollar
el
sistema
de
ecuaciones.
Una
versin
ampliamente
usada
es:
ste
es
el
ms
popular
de
los
mtodos
Runge-Kutta
Ejemplo
Runge Kutta para segundo orden, mtodo punto medio.
Resuelva el siguiente problema de valor inicial en el intervalo de x=0 a x=1.
dy
! yx 2 1.2 y
dx
Donde:
y(0)=1
h = 0.25
Solucin
y i 1 ! y i
! ( i yi )
= (
1
1
h yi
2
2
h)
Primera iteracin
k !
! !
.2
k1 ! 1.2
! f x h , y
k h
de
cuarto
orden:
k 2 ! f (0
1
1
(0.25) , 1 ( 1.2)(0.25))
2
2
k 2 ! f (0.125 ,0.85 )
k 2 ! 0.85(0.125) 2 1.2(0.85)
k 2 ! 1.006718
y1 ! 1 ( 1.006718 ) 0.25
y1 ! 0.748320
Segunda iteracin
x1 ! x 0 h
x1 ! 0 0.25
x1 ! 0.25
k 1 ! (x 1 , y 1 ) ! ! (0.25 , 0.748320)
k 2 ! f ( 0.25
1
1
(0.25) , 0.748320 ( 0.851432 )(0.25))
2
2
k 2 ! f (0.375,0.641891)
k 2 ! 0.641891(0.375) 2 1.2(0.641891)
k 2 ! 0.680003
y 2 ! 0.748320 ( 0.680003 )0.25
y 2 ! 0.578319
Tercera iteracin
x 2 ! x1 h
x 2 ! 0.25 0.25
x 2 ! 0.5
k 1 ! f(x 2 , y 2 ) ! f ! (0.5,0.578 319)
k 2 ! f ( x2
1
1
h , y 2 k1 h)
2
2
k 2 ! f (0.5
1
1
(0.25) , 0.578319 ( 0.549403)(0.25))
2
2
k 2 ! f (0.625 ,0.509643 )
y 3 ! 0.578319 ( 0.4125)0.25
y 3 ! 0.4752
Cuarta iteracin
x3 ! x 2 h
x3 ! 0.5 0.25
x3 ! 0.75
k 2 ! f ( x3
1
1
h , y 3 k1 h )
2
2
k 2 ! f ( 0.75
1
1
(0.25) , 0.4752 ( 0.3029)(0.25))
2
2
k 2 ! f (0.875,0.4373)
k 2 ! 0.4373(0.875) 2 1.2(0.4373)
k 2 ! 0.1900
y 4 ! 0.4752 ( 0.1900 )0.25
y 4 ! 0.4277
x4 ! x3 h
x 4 ! 0.75 0.25
x4 ! 1
Vectores solucin
X 0
y
0.25
0.5
0.75
plot(vectort,vectory,'b-p');
title('Mtodo runge kutta segundo orden. y vs t');
xlabel ('valores t');
ylabel ('valores y');
dy
! yx 2 1.2 y
dx
Donde:
y(0)=1
h = 0.25
Solucin.
En el mtodo de Runge kutta de tercer orden se utilizan las siguientes formulas:
y i 1 ! y i
1
(k 1 4 k 2 k 3 )h
6
k 1 ! f(xi, y i )
k 2 = f(x i
1
1
h , y i k 1 h)
2
2
k 3 ! f(x i h , y i k 1 h 2 k 2 h)
Primera iteracin
k 1 ! f(x 0 , y 0 ) ! f ! (0 , 1)
k1 ! (1)(0) 2 1.2(1)
k 1 ! 1 .2
k 2 ! f ( x0
k 2 ! f (0
1
1
h , y 0 k1 h )
2
2
1
1
(0.25) , 1 ( 1.2)(0.25))
2
2
k 2 ! f (0.125 ,0.85 )
k 2 ! 0.85(0.125) 2 1.2(0.85)
k 2 ! 1.0067
k 3 ! f(x o h , y o k 1 h 2 k 2 h)
k 3 ! f (0 (0.25), (1) ( 1.2)(0.25) 2(1.0067 )(0.25))
k 3 ! f (0.25,0 .7966 )
k 3 ! 0.7966 (0.25) 2 1.2(0.7966 )
k 3 ! 0.9062
y1 ! y 0
1
(k 1 4 k 2 k 3 )h
6
y1 ! 0.7445
Segunda iteracin
x1 ! x 0 h
x1 ! 0 0.25
x1 ! 0.25
k 1 ! f(x 1 , y 1 ) ! f ! (0.25 , 0.7445)
k1 ! (0.7445)(0.25) 2 1.2(0.7445)
k 1 ! 0.8468
k 2 ! f ( x1
1
1
h , y1 k1 h )
2
2
k 2 ! f ( 0.25
1
1
(0.25) , 0.7445 (0.8469)(0.25))
2
2
k 2 ! f (0.375,0.6386 )
k 2 ! 0.6386(0.375) 2 1.2(0.6386)
k 2 ! 0.6765
k 3 ! (x 1 h , y 1 k 1 h 2 k 2 h)
k 3 ! f (0.25 ( 0.25), (0.7445) ( 0.8469 )(0.25) 2( 0.6765)(0.25))
k 3 ! f (0.5,0.6178 )
k 3 ! 0.6178 (0.5) 2 1.2( 0.6178)
k 3 ! 0.5870
y 2 ! y1
1
(k 1 4k 2 k 3 )h
6
y 2 ! 0 .5720
Tercera iteracin
x 2 ! x1 h
x 2 ! 0.25 0.25
x 2 ! 0.5
k 1 ! f(x 2 , y 2 ) ! f ! (0.5,0.572 0)
k 2 ! f ( x2
1
1
h , y 2 k1 h)
2
2
k 2 ! f ( 0.5
1
1
(0.25) , 0.5720 ( 0.5434)(0.25))
2
2
k 2 ! f (0.625,0.5041)
k 2 ! 0.5041(0.625) 2 1.2(0.5041)
k 2 ! 0.4080
k 3 ! (x 2 h , y 2 k 1 h 2 k 2 h)
k 3 ! f ( 0.5 (0.25), ( 0.5720 ) ( 0.5434 )(0.25) 2(0.4080 )(0.25))
k 3 ! f (0.75,0.5038)
k 3 ! 0.5038 (0.75) 2 1.2( 0.5038)
k 3 ! 0.3212
y3 ! y2
1
(k 1 4 k 2 k 3 )h
6
y 3 ! 0.4679
Cuarta iteracin
x3 ! x 2 h
x3 ! 0.5 0.25
x3 ! 0.75
k 1 ! f(x 3 , y 3 ) ! f ! (0.75,0.46 79)
k1 ! (0.4679)(0.75) 2 1.2(0.4679)
k 1 ! 0.2986
k 2 ! f ( x3
1
1
h , y 3 k1 h )
2
2
k 2 ! f ( 0.75
1
1
(0.25) , 0.4679 ( 0.2983)(0.25))
2
2
k 2 ! f (0.875,0.4306 )
k 2 ! 0.4306(0.875) 2 1.2(0.4306)
k 2 ! 0.1871
k 3 ! f(x 3 h , y 3 k 1 h 2 k 2 h)
k 3 ! f (0.75 (0.25), (0.4679 ) ( 0.2983)(0.25) 2( 0.1871)(0.25))
k 3 ! f (1,0.4489 )
k 3 ! 0.4489(1) 2 1.2(0.4489)
k 3 ! 0.0898
y4 ! y3
1
(k 1 4 k 2 k 3 )h
6
y 4 ! 0 .4206
x4 ! x3 h
x 4 ! 0.75 0.25
x4 ! 1
Vectores solucin
X 0 0.25
y
0.5
0.75
vectory=[vectory,y];
vectort=[vectort,t];
end
vectory
vectort
subplot (1,1,1);
plot(vectort,vectory,'r-*');
title('Mtodo runge kutta Tercer orden. y vs t');
xlabel ('valores t');
ylabel ('valores y');
Los llamados mtodos de Runge-Kutta son una serie de algoritmos para calcular
aproximaciones numricas del valor de la solucin de:
x1 ! x0 h ; x2 ! x1 h ; etc
Con muy buena precisin, sin que, para ello, sea necesario que los h sean muy pequeos. El
procedimiento consta de los siguientes pasos:
El algoritmo es el siguiente:
}
void reportar(float x, float y, int 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)<<"SELECCIONE OPCION\n";
cout<<setw(50)<<"-----------------\n"<<endl;
cout<<"1.Metodo de Euler"<<endl;
cout<<"2.Salir"<<endl;
cout<<"\nSeleccione Opcion: ";cin>>opc;
}while(opc<1 || opc>2);
return opc;
}
void Kutta(){
float x0,y0,xf,yf,h,k1,k2,k3,k4;
int n,i;
clrscr();
cout<<setw(50)<<"Metodo de Runge - Kutta"<<endl;
cout<<setw(50)<<"-----------------------"<<endl<<endl;
cout<<"Ingrese el valor de x0: ";
cin>>x0;
cout<<"Ingrese el valor de y0: ";
cin>>y0;
cout<<"ingrese el valor de xf: ";
cin>>xf;
do{
cout<<"Ingrese el numero de subintervalos a emplear: ";
cin>>n;
}while(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);
}
EN JAVA
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author JOSE MANUEL
*/
public class RK {
public static double func(double x, double y)
{
return //-2*x^3+12*x^2-20*x+8.5;
-2*Math.pow(x, 3)+12*Math.pow(x, 2)-20*x+8.5;
}
public static void reportar(double x, double y, int i)
{
System.out.println("\t\t" +i +"\t\t" +x +"\t\t" +y );
}
public static int menu()
{
int opc=0;
do
{
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
try
{
System.out.println("SELECCIONE OPCION");
System.out.println("=================");
System.out.println("1.Metodo de Runge Kutta");
System.out.println("2.Salir");
System.out.print("Opcion:");opc=Integer.parseInt(br.readLine());
}catch(Exception e){e.getMessage();}
}while(opc<1||opc>2);
return opc;
}
public static void Kutta(){
double x0,y0,xf,yf,h,k1,k2,k3,k4;
int n,i;
System.out.println("Metodo de Runge Kutta");
System.out.println("---------------------");
numero
de
}while(n<=0);
h=(xf-x0)/n;
System.out.println("");
System.out.println("\t\t" +"I" +"\t\t" +"Xi" +"\t\t" +"Yi" );
System.out.println("\t\t" +"-" +"\t\t" +"-" +"\t\t" +"-" );
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);
subintervalos
emplear:
}
System.out.println("El valor de Yf: " +y0);
}catch(Exception e){e.printStackTrace();}
}
public static void terminar()
{System.out.println("Gracias por usar el programa");
}
public static void main (String[]args)
{int opc;
do
{
opc=menu();
switch(opc)
{case 1: Kutta(); break;
case 2: terminar();break;
}
}
while(opc!=2);
}
}
EN MATLAB
function f
fprintf('\n \tRESOLUCION DE ECUACIONES DIFERENCIALES POR MEDIO RUNGEKUTTA DE ORDEN 4\n')
fprintf('\n%2.0f%10.6f%10.6f\n',it,x0,y0);
end
fprintf('\n El punto aproximado y(x1) es = %8.6f\n',y0);
Aplicacin
Los mtodos numricos son tcnicas, donde es posible resolver los problemas por medio de
operaciones aritmticas, estos mtodos implementan un buen numero de clculos que son por
dems demasiado lentos si se hacen manualmente, gastando mucha energa en la tcnica misma de
solucin en vez de aplicarla sobre la definicin del problema y su interpretacin.
El trabajo montono que se haca anteriormente al uso de la computadora, hace de importancia, el
dominio de los mtodos numricos, los cuales se deben llevar a cabo en combinacin con las
capacidades y potencialidades de la programacin de computadoras para de esa forma resolver los
problemas de ingeniera mucho ms fcilmente y eficientemente.
En general, estos mtodos se aplican cuando se necesita un valor numrico como solucin a un
problema matemtico, y los procedimientos "exactos" o "analticos" (manipulaciones algebraicas,
teora de ecuaciones diferenciales, mtodos de integracin, etc.) son incapaces de dar una respuesta.
Debido a ello, son procedimientos de uso frecuente por fsicos e ingenieros, y cuyo desarrollo se ha
visto favorecido por la necesidad de stos de obtener soluciones, aunque la precisin no sea
completa. Debe recordarse que la fsica experimental, por ejemplo, nunca arroja valores exactos
sino intervalos que engloban la gran mayora de resultados experimentales obtenidos, ya que no es
habitual que dos medidas del mismo fenmeno arrojen valores exactamente iguales.
Conclusiones
El estudio de los mtodos numricos, es muy til y por ende importante para quien utilice esta
herramientas para resolucin de operaciones, las cuales se saben que pueden resultar complicadas,
tediosas y largas, y por ms que se dominen los mtodos tradicionales, estos muchas veces pueden
no ser suficientes, sin embargo esto no quiere decir que la operacin sea imposible de solucionar, y
es ah donde los mtodos numricos se aplican, y facilitan es trabajo de cierta manera.
Dentro del estudio de los mtodos numricos, se encuentran una gran variedad de aplicaciones
como lo fue el descrito en el presente trabajo referido al mtodo de runge kutta, que tiene como
objetivo principal el anlisis y solucin de los problemas de valor inicial de ecuaciones diferenciales
ordinarias, siendo estos una extensin del mtodo de Euler para resolverlas, pero con un orden de
exactitud ms alto que este, logrando as la exactitud del procedimiento sin requerir el clculo de
derivadas superiores Por tal razn se toma como un mtodo de gran facilidad y rapidez lo que lo
hace de gran importancia, ya que debido a estas caractersticas su implantacin resulta ms cmoda
y fcil de manejar, tomando en cuenta a la misma vez la utilizacin de su algoritmo resultando una
gran ventaja a nivel de su desenvolvimiento en la programacin en MATLab. El mecanismo est
basado en la aplicacin de ecuaciones matemticas de gran facilidad de empleo, siendo esta otra
caracterstica positiva. Este mtodo es de gran aplicabilidad en diversas reas de la industria lo que
lo hace muy usado en distintos niveles.
El mtodo de Runge Kutta de cuarto orden es una serie de algoritmos para calcular
aproximaciones numricas.
Bibliografa
Chapra, S y Canale, R (2003). Mtodos numricos para ingenieros. Editorial Macgraw Hill. Cuarta
edicin. Mxico.
C. Conde, E. Schiavi y A.I. Muoz. (2006). Mtodos numricos para La resolucin de problemas de
valor inicial. Disponible en: http://www.escet.urjc.es/~matemati/mm_iq/tema5.pdf