Anda di halaman 1dari 7

Tarea 2, Ejercicios: 5.5, 5.7, 5.9, 5.

10
Licenciatura en Fsica Aplicada
Simulacion de fenomenos fsicos
2008-17916, Brayan Lemus

22 de febrero de 2015

1. Ejercicio 5.5
Uno de los problemas estandar de la fsica es la cada en una dimension, pero contrariamente la practica
comun, incluyamos resistencia del aire para ver que tan grande es el efecto. el cambio en el tiempo del momentum
es:

dp
= mg kv 2
dt
donde m es la masa del objeto, g = 9,8m/s2 es la aceleracion debido a la gravedad, y k es el coeficiente
de friccion. Para una esfera en particular con masa 102 kg, el coeficiente de friccion fue determinado como
k = 104 kg/m. Si p = mv, use el metodo de cuarto orden Runge-Kutta para encontrar la velocidad de la esfera
desde el reposo como una funcion del tiempo para 0 < t < 10 segundos. Elija un tamano de paso para asegurar
4 cifras significativas de precision.

Posicion Velocidad

1.1. Evaluacion de ecuacion diferencial

v o i d C a i d a R e s i s t e n c i a ( d o u b l e y , d o u b l e f r e c , d o u b l e dvdt )
{
double g = 9 . 8 1 ;
dvdt [ 1 ] = f r e c y [ 1 ] abs ( y [ 1 ] ) g ;
dvdt [ 0 ] = y [ 1 ] ;
}
1.2. Runge-Kutta

v o i d RK4 ( d o u b l e newy , d o u b l e y0 , d o u b l e paso , d o u b l e e x t r a 1 ,


v o i d ( d e r i v a d a ) ( d o u b l e , double , d o u b l e ) , i n t nvar )
{
int i ;
d o u b l e k0 , k1 , k2 , k3 , z ;
k0= m a l l o c ( nvar s i z e o f ( d o u b l e ) ) ;
k1= m a l l o c ( nvar s i z e o f ( d o u b l e ) ) ;
k2= m a l l o c ( nvar s i z e o f ( d o u b l e ) ) ;
k3= m a l l o c ( nvar s i z e o f ( d o u b l e ) ) ;
z= m a l l o c ( nvar s i z e o f ( d o u b l e ) ) ;

d e r i v a d a ( y0 , e x t r a 1 , k0 ) ;

f o r ( i = 0 ; i < nvar ; i ++)


{
z [ i ] = y0 [ i ] + ( k0 [ i ] paso ) / 2 ;
d e r i v a d a ( z , e x t r a 1 , k1 ) ;
}

f o r ( i = 0 ; i < nvar ; i ++)


{
z [ i ] = y0 [ i ] + ( k1 [ i ] paso ) / 2 ;
d e r i v a d a ( z , e x t r a 1 , k2 ) ;
}

f o r ( i = 0 ; i < nvar ; i ++)


{
z [ i ] = y0 [ i ] + ( k2 [ i ] paso ) ;
d e r i v a d a ( z , e x t r a 1 , k3 ) ;
}

f o r ( i = 0 ; i < nvar ; i ++)


{
newy [ i ] = y0 [ i ] + ( paso / 6 ) ( k0 [ i ] + 2 k1 [ i ] + 2 k2 [ i ] + k3 [ i ] ) ;
}

free ( k0 ) ;
free ( k1 ) ;
free ( k2 ) ;
free ( k3 ) ;
free (z );
}
1.3. Codigo - Principal

#i n c l u d e <s t d i o . h> / L i b r e r i a s G e n e r a l e s /
#i n c l u d e < s t d l i b . h> / L i b r e r i a s A d i c i o n a l e s /
#i n c l u d e <math . h> / L i b r e r i a s de Matematica /
#i n c l u d e </home/ b r a y e s t / L i b r e r i a s P r o g r a / d e r i v a d a s . h> / D e r i v a d a s /
#i n c l u d e </home/ b r a y e s t / L i b r e r i a s P r o g r a / metodos . h> / L i b r e r i a de metodos n u m e r i c o s /

main ( )
{
int i ;
d o u b l e C o n d I n i c i a l e s , Mecanica ;

// I n i c i a l i z a r v a r i a b l e s

d o u b l e e c u a c i o n e s = 2 ; // E c u a c i o n e s a r e s o l v e r

C o n d I n i c i a l e s = malloc ( ecuaciones s i z e o f ( double ) ) ;


Mecanica = m a l l o c ( e c u a c i o n e s s i z e o f ( d o u b l e ) ) ;
C o n d I n i c i a l e s [ 0 ] = 0 ; // D i s t a n c i a
Mecanica [ 0 ] = 0 ; // S o l u c i o n D I s t a n c i a
C o n d I n i c i a l e s [ 1 ] = 0 ; // V e l o c i d a d
Mecanica [ 1 ] = 0 ; // S o l u c i o n V e l o c i d a d

d o u b l e dt = 0 . 0 5 ; // Tamano de paso
d o u b l e R e s t r i c c i o n = 1 0 ; // Tiempo l i m i t e s e g u n d o s
d o u b l e tiempo = 0 ; // Contador t e m p o r a l
c o n s t d o u b l e k = 1 e 4; // Constante de F r i c c i o n
c o n s t d o u b l e m = 1 e 2; // Constante de masa
c o n s t d o u b l e f = k/m; // Parametro e s c a l a r

FILE out ;
out = f o p e n ( CaidaAmortiguada . dat , w ) ;

w h i l e ( tiempo < R e s t r i c c i o n )
{
f p r i n t f ( out , %.4 f %.4 f %.4 f \n , tiempo , Mecanica [ 0 ] , Mecanica [ 1 ] ) ;
RK4( Mecanica , C o n d I n i c i a l e s , dt , f , C a i d a R e s i s t e n c i a , e c u a c i o n e s ) ;
C o n d I n i c i a l e s [ 0 ] = Mecanica [ 0 ] ;
C o n d I n i c i a l e s [ 1 ] = Mecanica [ 1 ] ;
tiempo = tiempo + dt ;
}

f c l o s e ( out ) ;

free ( CondIniciales );
f r e e ( Mecanica ) ;
return 0;
}
2. Ejercicio 5.7
Repita el problema del proyectil en movimiento con resistencia del aire, con todos los parametros igual,
pero usando el algoritmo de Runge-Kutta-Fehlberg. Use un maximo valor de tolerancia de 105 y despliegue
los valores aceptados para x y y (Tiempo, Velocidad) en cada paso.

Los algoritmos utilizados son los que estan disponibles en la pagina web del curso, odeint.h y rkf.h, y estan
agregados como libreras, por lo tanto unicamente cambia el programa principal

nok = 93 nbad = 1

Tiempo Distancia Velocidad


0.000000 0.000000 0.000000
0.000050 -0.000000 -0.000490
0.000300 -0.000000 -0.002943
0.001550 -0.000012 -0.015205
0.007800 -0.000298 -0.076518
0.039050 -0.007479 -0.383061
0.195300 -0.186970 -1.913507
0.655691 -2.094152 -6.343398
1.277510 -7.800217 -11.903778
2.039431 -19.148341 -17.666888
2.913906 -36.893924 -22.626457
3.897395 -61.101039 -26.305195
4.948297 -90.078181 -28.619834
6.056590 -122.608946 -29.942115
7.263826 -159.245986 -30.666018
8.609270 -200.789334 -31.037294
10.000000 -244.084638 -31.201919

Posicion Velocidad
2.1. Programa principal
Los metodos numericos son llamados en la rutina de integracion odeint.h.

#i n c l u d e <s t d i o . h> / L i b r e r i a s G e n e r a l e s /
#i n c l u d e < s t d l i b . h> / L i b r e r i a s A d i c i o n a l e s /
#i n c l u d e <math . h> / L i b r e r i a s de Matematica /
#i n c l u d e </home/ b r a y e s t / L i b r e r i a s P r o g r a / d e r i v a d a s . h> / D e r i v a d a s /
#i n c l u d e </home/ b r a y e s t / L i b r e r i a s P r o g r a / o d e i n t . h> / Rutina de i n t e r g r a c i o n /

main ( )
{
int i ;
double C o n d I n i c i a l e s ;

// I n i c i a l i z a r v a r i a b l e s

d o u b l e e c u a c i o n e s = 2 ; // E c u a c i o n e s a r e s o l v e r

C o n d I n i c i a l e s = malloc ( ecuaciones s i z e o f ( double ) ) ;


C o n d I n i c i a l e s [ 0 ] = 0 ; // D i s t a n c i a
C o n d I n i c i a l e s [ 1 ] = 0 ; // V e l o c i d a d

d o u b l e t1 , t2 , h ;

/ v a r i a b l e s para RungeKuttaF e l b e r g /

d o u b l e e p s = 1 e 10;
d o u b l e hmin = 1 e 10;
h = 0.05;
t 1 =0;
t 2 =10;

i n t nok , nbad ;

o d e i n t ( C o n d I n i c i a l e s , e c u a c i o n e s , t1 , t2 , eps , h , hmin , &nok ,


&nbad , C a i d a R e s i s t e n c i a , r k q s ) ;

p r i n t f ( nok = %d , nbad= %d\n , nok , nbad ) ;

free ( CondIniciales );
return 0;
}
3. Ejercicio 5.9
Haga las correcciones necesarias al codigo, y resuelva la siguiente ecuacion diferencial.

00 0
y = 4y y(0) = 1, y (0) = 0.

en el intervalo de 0 < x < 2. Compare con el resultado analtico. Grafque el resultado.


Solucion analtica

y = cos(2x) y 0 = 2sen(2x)

Y vs X Y vs X

3.1. Modificaciones necesarias al programa y/o funciones


Utilizando el metodo de Runge-Kutta-Felhberg, solamente hay que hacer una modificacion al llamado de
odeint y las condiciones iniciales. Se utilizo la funcion utilizada para la tarea anterior para evaluar la ecuacion.

C o n d I n i c i a l e s [ 0 ] = 1 ; // D i s t a n c i a
C o n d I n i c i a l e s [ 1 ] = 0 ; // V e l o c i d a d

o d e i n t ( C o n d I n i c i a l e s , e c u a c i o n e s , t1 , t2 , eps , h , hmin , &nok ,


&nbad , ArmonicoSimple , r k q s ) ;

v o i d ArmonicoSimple ( d o u b l e x , d o u b l e y , d o u b l e dvdt )
{
double f r e c = 2 ;
dvdt [ 1 ] = f r e c f r e c y [ 0 ] ; // y [ 0 ] = x
dvdt [ 0 ] = y [ 1 ] ; // y [ 1 ] = v
}
4. Ejercicio 5.10
Use el integrador para resolver la ecuacion (5.59)

x = x (x2 1)x

para  = 1, (un valor mucho mas grande que cero). Como condiciones iniciales, sea x(0) = 0,5, y x(0) = 0,
Siga la solucion para varias oscilaciones, en el intervalo de 0 < t < 8, y grafque los resultados.

Posicion Vs Tiempo Velocidad Vs Tiempo

4.1. Modificaciones necesarias


Crear otra funcion para evaluar la ecuacion.

Modificar condiciones iniciales.

Modificar tiempos.

v o i d VanDerPol ( d o u b l e x , d o u b l e y , d o u b l e dvdt )
{
double e = 1 ;
dvdt [1]= y [0] e ( y [ 0 ] y [ 0 ] 1 ) y [ 1 ] ;
dvdt [ 0 ] = y [ 1 ] ;
}

C o n d I n i c i a l e s [ 0 ] = 0 . 5 ; // D i s t a n c i a
C o n d I n i c i a l e s [ 1 ] = 0 ; // V e l o c i d a d

t 2 =8M PI ;

o d e i n t ( C o n d I n i c i a l e s , e c u a c i o n e s , t1 , t2 , eps , h , hmin ,
&nok , &nbad , VanDerPol , r k q s ) ;

Anda mungkin juga menyukai