Metodo de Runge Kutta
January 30, 2017 | Author: José Manuel Limachi Chávez | Category: N/A
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