Solucion Examen Final Gomez Quispe Juan Rafael
Solucion Examen Final Gomez Quispe Juan Rafael
Solucion Examen Final Gomez Quispe Juan Rafael
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