Metodo de Runge Kutta

January 30, 2017 | Author: José Manuel Limachi Chávez | Category: N/A
Share Embed Donate


Short Description

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

Description

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

 

01  +! 1 2$1 È Resuelva el siguiente problema de valor inicial en el intervalo de x=0 a x=1.

s 

s

v

 vs

Donde: y(0)=1 h = 0.25 Solución

y i 1

2

h

( i yi )

1

2

yi 

= (

1 1  h yi  2 2

i

1

h)

§V mrimera iteración



6

6 6 2

 6 å 



.2

 v





ë þ , s ë

å þ

de

cuarto

orden:

2

 (0 ë

1 1 (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 k1

1

0.25 (x 1 , y 1 )

(0.25 , 0.748320)

(0.748320 )(0.25) 2 1.2(0.748320 )

 1 6 0.851432

1 1 (0.25) , 0.748320 ë ( 0.851432 )(0.25)) 2 2

2

 ( 0.25 ë

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

2

 ( 2 ë

1 1  , s 2 ë 1 ) 2 2

2

 (0.5 ë

1 1 (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

2

 ( 3 ë

2

 ( 0.75 ë

2

 (0.875,0.4373)

2

0.4373(0.875) 2  1.2(0.4373)

1 1  , s 3 ë 1  ) 2 2 1 1 (0.25) , 0.4752 ë ( 0.3029)(0.25)) 2 2

 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 y  

0.25

0.5

0.75

1

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:

y i ë1 k1

yi ë

f(xi, y i )

k 2 = f(x i ë k3

1 (k 1 ë 4 k 2 ë k 3 )h 6

1 1 h , y i ë k 1 h) 2 2

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  , s 0 ë 1  ) 2 2

2

 ( 0 ë

2

 (0 ë

2

 (0.125 ,0.85 )

1 1 (0.25) , 1 ë ( 1.2)(0.25)) 2 2

 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 (k 1 ë 4 k 2 ë k 3 )h 6

y1

y0 ë

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

2

 ( 1 ë

2

 ( 0.25 ë

1 1  , s1 ë 1  ) 2 2 1 1 (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 3

0.5870

y2

y1 ë

s2

0 .5720

1.2( 0.6178)

1 (k 1 ë 4k 2 ë k 3 )h 6

§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

2

 ( 2 ë

1 1  , s 2 ë 1 ) 2 2

2

 ( 0.5 ë

1 1 (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 3

0.3212

y3

y2 ë

s3

0.4679

1.2( 0.5038)

1 (k 1 ë 4 k 2 ë k 3 )h 6

§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  , s 3 ë 1  ) 2 2

2

 ( 3 ë

2

 ( 0.75 ë

2

 (0.875,0.4306 )

1 1 (0.25) , 0.4679 ë ( 0.2983)(0.25)) 2 2

 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 (k 1 ë 4 k 2 ë k 3 )h 6

y4

y3 ë

s4

0 .4206

4 6 3    4 6 0.75  0.25 4

1

Vectores solución

X 0 0.25 y

0.5

0.75

1

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 winclude winclude winclude

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

i void reportar(float x, float y, int i) {cout
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF