Sei sulla pagina 1di 30

c 

c c 


 c   c c

 


 
  


 ! 

Trabajo presentado en cumplimiento de la asignatura

Métodos Numéricos

 "

 "#$  %& &'()

%"

*  ) 

# %+,-..


c /!c

l método de Runge Kutta es un método numérico de resolución de ecuaciones diferenciales que


surge como una mejora del método de uler. l método de uler se puede considerar como un
método de Runge Kutta de primer orden, el de Heun, es un método de Runge Kutta de orden dos.

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:

F = a1k1 + a2k2 +«.+ ankn

Donde las a son constantes y las k son:

1 = ( ,s )

2 = ( + 1,s + 111)

3 = ( + 2,s + 211 + 222)

n = ( + n,s + 2n-11 + n-1,22 + «. + qn-1,n-1kn-1h)

Donde las p y q son constantes.

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È

Desarrollando tres ecuaciones para evaluar las cuatro incógnitas:

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.

 = 1/2: Método de   con un solo corrector, donde:

 = 1 : Método del    .

 = 2/3: Método de  .

Siguiendo el mismo razonamiento para = 3, o sea, 


 de tercer orden, el resultado son
seis ecuaciones con ocho incógnitas, por lo tanto se deben suponer dos valores con antelación para
poder desarrollar el sistema de ecuaciones. Una versión ampliamente usada es:
Vste es el más popular de los métodos 
 de cuarto orden:

01

 +! 1 2$1 È

Resuelva el siguiente problema de valor inicial en el intervalo de x=0 a x=1.

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 (0.748320 )(0.25) 2 1.2(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

s 2 6 0.748320  ( 0.680003 )0.25

s2 0.578319
§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.578 319)

1 6 (0.578319 )(0.5) 2 1.2( 0.578319 )

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.509643 (0.625 ) 2 1.2( 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.4752  ( 0.1900 )0.25

s 4 6 0.4277

4 3 ë 

4 0.75 ë 0.25

4 6 1

Vectores solución

X 0 0.25 0.5 0.75 1


y 1 0.7483 0.5783 0.4752 0.4277


 */ 

Método Runge kutta de segundo orden

x=0;

y=1;

t=0;

Tmax=1;

h=0.25;

Iter=round ((tmax-t)/h);

Vectory=y;

Vectort=t;

For i=1:iter

Cálculo de las constantes de Runge-kutta

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');

title('Método runge kutta segundo orden. y vs t');

xlabel ('valores t');

ylabel ('valores y');

 +! 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.

n el método de Runge kutta de tercer orden se utilizan las siguientes formulas:

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 6  (0  (0.25), (1) ( 1.2)(0.25)  2( 1.0067 )(0.25))

3  (0.25,0 .7966 )

3 0.7966 (0.25) 2  1.2(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

k 1 6 f(x 1 , y 1 ) 6 f 6 (0.25 , 0.7445)

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  (0.25 ë ( 0.25), (0.7445)  ( 0.8469 )(0.25) ë 2( 0.6765)(0.25))

 3 6  (0.5,0.6178 )

 3 6 0.6178 (0.5) 2 1.2( 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 6 (0.5720 )(0.5) 2 1.2(0.5720 )

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  ( 0.5 ë (0.25), ( 0.5720 )  ( 0.5434 )(0.25) ë 2(0.4080 )(0.25))

 3 6  (0.75,0.5038)

 3 6 0.5038 (0.75) 2 1.2( 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

k 1 6 f(x 3 , y 3 ) 6 f 6 (0.75,0.46 79)

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 6  (0.75  (0.25), (0.4679 ) ( 0.2983)(0.25)  2( 0.1871)(0.25))

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 0.25 0.5 0.75 1


y 1 0.7445 0.5720 0.4679 0.4206

 */%

Método Runge-Kutta de 3er orden

x=0;

y=1;

t=0;

tmax=1;

h=0.25;

iter=(tmax-t)/h;

vectory=y;

vectort=t;

for i=1:iter

Cálculo de las constantes de Runge-kutta

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-*');

title('Método runge kutta Tercer orden. y vs t');

xlabel ('valores t');

ylabel ('valores y');




 +! 1% È

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

n puntos de la forma siguiente:

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 

 "


1% 62#(5 77

  77

winclude<iostream.h>

winclude<conio.h>

winclude<iomanip.h>

winclude<math.h>

float func(float x, float y){

return 0.5*(1+x)*pow(y,2);
i

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)<<"S L CCION OmCION\n";

cout<<setw(50)<<"-----------------\n"<<endl;

cout<<"1.Metodo de uler"<<endl;

cout<<"2.Salir"<<endl;

cout<<"\nSeleccione Opcion: ";cin>>opc;

iwhile(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;

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\tSalir del mrograma\n";

cout<<"\t\t\t\t------------------\n\n";

cout<<"Gracias por usar el programa"<<endl<<endl;

void main (void)

{int opc;

do

{clrscr();

opc=menu();

clrscr();

switch(opc)

{case 1: clrscr();Kutta(); break;

case 2: clrscr();terminar();break;

getch();

while(opc!=2);

getch();

i
 #

import java.io.BufferedReader;

import java.io.InputStreamReader;

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/**

* @author JOS MANU L

*/

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 );


i

public static int menu()

int opc=0;

do

BufferedReader br = new BufferedReader( new InputStreamReader(System.in));

try

System.out.println("S L CCION OmCION");

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());

icatch( xception e){e.getMessage();i

iwhile(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("---------------------");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try

System.out.print("Ingrese el valor de x0: ");x0=Double.parseDouble(br.readLine());

System.out.print("Ingrese el valor de y0: ");y0=Double.parseDouble(br.readLine());

System.out.print("Ingrese el valor de xf: ");xf=Double.parseDouble(br.readLine());

do{

System.out.print("Ingrese el numero de subintervalos a emplear:


");n=Integer.parseInt(br.readLine());

iwhile(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);
i

System.out.println(" l valor de Yf: " +y0);

icatch( xception e){e.printStackTrace();i

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);

  *

function f

fprintf('\n \tR SOLUCION D CUACION S DIF R NCIAL S mOR M DIO RUNG -


KUTTA D ORD N 4\n')
f=input('\n Ingrese la ecuacion diferencial\n','s');

x0=input('\n Ingrese el primer punto x0:\n');

x1=input('\n Ingrese el segundo punto x1:\n');

y0=input('\n Ingrese la condicion inicial y(x0):\n');

n=input('\n Ingrese el numero de pasos n:\n');

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('\n2.0f10.6f10.6f\n',it,x0,y0);

end

fprintf('\n l punto aproximado y(x1) es = 8.6f\n',y0);

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.

l trabajo monótono que se hacía anteriormente al uso de la computadora, hace de importancia, el


dominio de los métodos numéricos, los cuales se deben llevar a cabo en combinación con las
capacidades y potencialidades de la programación de computadoras para de esa forma resolver los
problemas de ingeniería mucho más fácilmente y eficientemente.

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.

l método de runge kutta es empleado para la resolución de ecuaciones diferenciales. Los


métodos Runge-Kutta o métodos 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.
l método de Runge Kutta de cuarto orden es una serie de algoritmos para calcular
aproximaciones numéricas.

*68

Chapra, S y Canale, R (2003). Métodos numéricos para ingenieros. ditorial Macgraw Hill. Cuarta
edición. México.

Calvo, M (1998). l método de Runge-kutta en la resolución numérica de ecuaciones diferenciales.


Disponible en: http://www.unizar.es/acz/02AcademicosNumerarios/Discursos/Calvo.pdf

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

Potrebbero piacerti anche