Академический Документы
Профессиональный Документы
Культура Документы
1.
metodo de euler (con diferencia hacia adelante)
el error local es proporcional a 0(h2)
el error global es proporcional a 0(h)
tiene capacidad de autoinicializacion
es el mas sencillo de los metodos
metodo de verlet
el error local es proporciuonal a 0(h2)
el error global es proporcional a 0(h3)
se necesita tener los valores anteriores para iniciar la iteracion(los terminos Xn-1)
2.
a) Las ecuaciones de movimiento
F=ma , dv/dt=g , dz/dt=v
b) esta gráfica esta corregida, en la version anterior , habia un error con dos terminos al resolver
las ecuaciones simultaneas
c) la solucion exacta
zmax=(v0*sin60)2/2*g = 95.59985724 m (corregidos)
zmax (obtenido numericamente)= 96.6835251 m (corregidos)
∆zmax=1.08366786
para thetha=45
energia cinetica= (0.5)*m*(v**2)
Ek=0.5*0.2*(35.3553391**2+21.1357098**2 )= 169.6721902J (corregido)
el angulo = atan(vy/vx)=30.87132617°
pdta: los codigos usados se encuentran en el anexo al final (corregidos un factor de suma de h que
generaba un error de aproximadamente 9 unidades)
3) para resolver usamos el metodo de runge kutta, usamos un bucle para que guarde los valores
con el fin de tener mejor visualizacion, el tamaño de paso fue h=0.2
4) generamos puntos dentro de un circulo usando Random_number , que crea numeros aleatorios
entre 0:1 , pero lo modificamos para que sea de 0:12 , entonces obtenemos el disco centrado en
el punto (6,6) , gnerado con n=200000 , radio= 6 cm
como la densidad en constante=1 , area=masa
calculo de la masa total = 113.043602 , valor analitico= 113.0973355 , error=0.0537335
para los centros de masa se usa las siguientes ecuaciones y una masa unitaria=
Xcm=(∑mi*x*)/M = 6.00849724 cm , error=(0.00847724,0.00606346)
Ycm=(∑mi*y*)/M = 6.00606346 cm
que es lo que deberia corresponder ya que analiticamente Xcm,Ycm=(6,6)
F=mA
Fx=mAx
-kVx=mAx
dVx/dt=Ax
dX/dt=Vx
para la componente Z
Fz=mAz
-kVz=mAz
dVz/dt=Az
dZ/dt=Vz
para k=10**-4 , se ve que no hay mucha variacion , asi que se prosiguio a desarrollar para distintos
valores de k
ANEXO 2
program simulacion_mov_parabolico
implicit none
real:: v,vy,vx,t
real:: h,fy,gy,fx,gx,tetha,angulo
real:: t0,y0,y,pi,x0,x
!condiciones iniciales
pi=4.0*atan(1.0)
print *, "ingrese el valor de la velocidad inicial y el angulo de elevacion V,tetha"
read *, v,tetha
open(unit=11,file="datos_mov_parabolico_simulacion_k=060.dat",action="write")
angulo=(tetha*pi)/180.0
h=0.05 !tamaño del paso
vy=v*sin(angulo)
vx=v*cos(angulo)
t0=0.0
x0=0.0
y0=0.0
y=y0
x=x0
t=t0
do while(y >= 0.0)
y=y+h*gy(vy)
vy=vy+h*fy(vy)
x=x+h*gx(vx)
vx=vx+h*fx(vx)
write(11,*) t,x,y,vx,vy
t=t+h
end do
end program
ANEXO 3
module constantes
implicit none
real(8)::rho=298.0 !densidad en kg/m3
real(8)::v=0.01 ! volumen en m3
real(8)::a=0.25 ! area superficial en m2
real(8)::c=800.0 ! calor especif. en J/Kg K
real(8)::hc=30.0 ! coeficiente de transferencia
real(8)::eps=0.6 ! emisividad
real(8)::sigma=5.67e-8 ! constante de S_B
end module constantes
PROGRAM coll
use constantes
IMPLICIT NONE
REAL(8)::t,dt,tf,te
INTEGER :: m
open(unit=12,file='datos_enfriamiento.dat',action='write')
CALL inicio(t,dt,tf,Te,m)
write(12,fmt=*)'# ','dt=',dt,'m=',m
write(12,fmt=*) '# t Te'
DO WHILE (t<tf)
write(12,40) t,Te
CALL RK2(dt,Te,m)
t=t+dt*m
END DO
40 format (5F10.4)
close(12)
CONTAINS
SUBROUTINE inicio(t,dt,tf,Te,m)
REAL(8) ::Te,t,dt,tf
integer::N,m
t=0.0d0
tf=200.0d0
print*,'N,m?'
read*,N,m
dt=tf/N
Te=573.0d0 !KELVIN
END SUBROUTINE
SUBROUTINE RK2(dt,Te,m)
REAL(8)::dt,Te
REAL(8)::k1,k2
INTEGER::m,j
do j=1,m
k1=dt*f(Te)
k2=dt*f(Te+k1)
Te=Te+(k1+k2)/2
end do
END SUBROUTINE
END PROGRAM
ANEXO 4
!este programa calcula el valor de pi por el metodo de montecarlo,
!que es creear puntos aleatorios.
program disco_hueco
implicit none
call system_clock(count)
seed = count
call random_seed(put=seed)
open(unit=7,file="numeros_aleatorios.dat",action="write")
open(unit=8,file="valores_disco.dat",action="write")
n=0
do i=1,nt
call random_number(rnd)
x=rnd*12.0
call random_number(rnd)
y=rnd*12.0
write(7,*) x,y
if (sqrt((x-6)**2+(y-6)**2)<=6.0) then
n=n+1
write(8,*) x,y
end if
end do
!la masa=area
pi= 4.0*(real(n)/nt*1.0)
masa_total= pi*(6.0**2)
masa_unitaria= masa_total/(n)
print *, pi,masa_total,masa_unitaria
program analisis_datos
implicit none
real,dimension(157005):: Xcm,Ycm,Iz
real:: valorXcm,valorYcm
integer i
open(unit=8,file="valores_disco.dat",action="read")
do i=1,157005
read(8,*) Xcm(i),Ycm(i)
end do
valorXcm=sum(Xcm)
valorYcm=sum(Ycm)
print *, (7.20000011e-4*valorXcm)/113.043602 ,(7.20000011e-4*valorYcm)/
113.043602
end program
ANEXO 5
program simulacion_mov_parabolico
implicit none
real:: v,vy,vx,t
real:: h,fy,gy,fx,gx,tetha,angulo
real:: t0,y0,y,pi,x0,x
!condiciones iniciales
pi=4.0*atan(1.0)
print *, "ingrese el valor de la velocidad inicial y el angulo de elevacion V,tetha"
read *, v,tetha
open(unit=11,file="datos_mov_parabolico_simulacion_k=10.dat",action="write")
angulo=(tetha*pi)/180.0
h=0.05 !tamaño del paso
vy=v*sin(angulo)
vx=v*cos(angulo)
t0=0.0
x0=0.0
y0=0.0
y=y0
x=x0
t=t0
do while(y >= 0.0)
y=y+h*gy(vy)
vy=vy+h*fy(vy)
x=x+h*gx(vx)
vx=vx+h*fx(vx)
write(11,*) t,x,y,vx,vy
vy=vy+h
vx=vx+h
t=t+h
end do
end program