metodo de runge kutta

Upload: jose-manuel-limachi-chavez

Post on 06-Jul-2015

6.813 views

Category:

Documents


6 download

DESCRIPTION

Investigacion de Metodo de Runge Kutta y su implementación en JAVA, C++ y MATLAB

TRANSCRIPT

UNIVERSIDAD PERUANA UNION FACULTAD DE INGENIERIA Y ARQUITECTURA EAP Ingeniera de sistemas

PROYECTO DE INVESTIGACION El Metodo de Runge Kutta

Trabajo presentado en cumplimiento de la asignatura Mtodos Numricos

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:

a2 = 1 : Mtodo del punto medio.

a2 = 2/3: Mtodo de Ralston.

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

de

cuarto

orden:

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 dxDonde: y(0)=1 h = 0.25 Solucin

y i 1 ! y i 1

2

h

! ( i yi )

2

= (

i

1 1 h yi 2 2

1

h)

Primera iteracin

k !k1 ! 1.2

2

! f x h , y

!

! !

.2

kh

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.748320Segunda iteracin

x1 ! x 0 hx1 ! 0 0.25 x1 ! 0.25 k 1 ! (x 1 , y 1 ) ! ! (0.25 , 0.748320)

k1 ! (0.748320 )(0.25) 2 1.2(0.748320 )k 1 ! 0.851432

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)

k1 ! (0.578319 )(0.5) 2 1.2( 0.578319 )k 1 ! 0.549403

k 2 ! f ( x2

1 1 h , y 2 k1 h) 2 2 1 1 (0.25) , 0.578319 ( 0.549403)(0.25)) 2 2

k 2 ! f (0.5

k 2 ! f (0.625 ,0.509643 )

k 2 ! 0.509643 (0.625 ) 2 1.2( 0.509643 )k 2 ! 0.4125

y 3 ! 0.578319 ( 0.4125)0.25 y 3 ! 0.4752Cuarta iteracin

x3 ! x 2 h x3 ! 0.5 0.25 x3 ! 0.75

k 1 ! f(x 3 , y 3 ) ! f ! (0.75,0.47 52) k1 ! (0.4752)(0.75) 2 1.2(0.4752)k 1 ! 0.3029

k 2 ! f ( x3

1 1 h , y 3 k1 h ) 2 2 1 1 (0.25) , 0.4752 ( 0.3029)(0.25)) 2 2

k 2 ! f ( 0.75

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 hx 4 ! 0.75 0.25 x4 ! 1Vectores solucin

X 0 y

0.25

0.5

0.75

1

1 0.7483 0.5783 0.4752 0.4277

Algoritmo MATLAB- Segundo orden %Mtodo 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 %Clculo 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('Mtodo runge kutta segundo orden. y vs t'); xlabel ('valores t'); ylabel ('valores y');

Runge Kutta para tercer orden. Se resuelve el mismo problema anterior pero esta vez mediante el uso del mtodo Runge kutta de tercer grado, 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. 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

1 1 h , y 0 k1 h ) 2 2

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.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 hx1 ! 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 1 1 (0.25) , 0.7445 (0.8469)(0.25)) 2 2

k 2 ! f ( 0.25

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 .5720Tercera 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)

k1 ! (0.5720 )(0.5) 2 1.2(0.5720 )k 1 ! 0.5434

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 1 1 (0.25) , 0.4679 ( 0.2983)(0.25)) 2 2

k 2 ! f ( 0.75

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 hx 4 ! 0.75 0.25 x4 ! 1

Vectores solucin

X 0 0.25 y

0.5

0.75

1

1 0.7445 0.5720 0.4679 0.4206

Algoritmo MATLAB- Tercer orden %Mtodo 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 %Clculo 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('Mtodo runge kutta Tercer orden. y vs t'); xlabel ('valores t'); ylabel ('valores y');

Runge Kutta para cuarto orden.

Los llamados mtodos de Runge-Kutta son una serie de algoritmos para calcular aproximaciones numricas del valor de la solucin de:

En puntos de la forma siguiente:

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:

Para calcular un valor aproximado de la solucin y1 en el punto

El algoritmo es el siguiente:

Implementacion en MATLab, Java y C++ EN C++ #include #include #include #include

float func(float x, float y){ return 0.5*(1+x)*pow(y,2);

} void reportar(float x, float y, int i) {cout