Вы находитесь на странице: 1из 11

EXAMEN FINAL DE ANALISIS NUMERICO 2018 II

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)

metodo de runge kutta de 4to orden


el error local es proporcional a 0(h5)
el error global es proporcional a 0(h4)
posee menos error que los demas metodos

metodo predictor corrector (runge kutta de 2dop orden)


el error local es proporcional a 0(h3)
el error global es proporcional a 0(h2)
capacidad de autoinicializacion

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

zmax=(v0*sin45)2/2*g = 63.73226331 m (coregidos)


zmax (obtenido numericamente)= 64.6173325 m (corregidos)
∆zmax=0.88506919

d) altura maxima para theta=60 , 96.6835251 m , tiempo = 4.39999866 s (corregidos)


altura maxima para theta=45 , 64.6173325 m , tiempo =3.59999776 s(corregidos)

e) alcance maximo para theta=60, 222.499985 m (corregido)


alcance maximo para theta=45, 258.093658 m (corregido)
f)
para theta=60
energia cinetica= (0.5)*m*(v**2)
Ek=0.5*0.2*(24.9999981**2+23.1976280**2)=116.312985 J (corregido)
el angulo = atan(vy/vx)= 42.85841815°

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

vemos que tiene naturaleza exponencial

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)

para el calculo del momento de inercia


Iz=(0.5)*M*(R2) , asumiendo que gira con respecto a su centro
Iz= 2034.7844836 , error=0.9675554

5)para la pregunta 2 , simplemente le damos valor a la cosntante k=5.0 , el codigo se encuentra


en el anexo
las ecuaciones seran:

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

real function fy(vy)


real vy,k,m,g
k=0.0
m=0.2
g=9.80665
fy=-(k/m)*vy-g
end function
real function gy(vy)
real vy
gy=vy
end function
real function fx(vx)
real vx,k,m
k=0.0
m=0.2
fx=-(k/m)*vx
end function
real function gx(vx)
real vx
gx=vx
end function

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

REAL(8) FUNCTION f(Te)


implicit none
REAL(8)::Te
f=(a/(rho*c*v))*(eps*sigma*(300.0**4-Te**4)+hc*(300.0-Te))
END FUNCTION

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

integer count ,seed(12),i,nt,n,nm


real rnd,x,y,pi,masa_total,masa_unitaria,valorXcm,valorYcm
real,dimension(157005):: Xcm,Ycm,Iz

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")

print *,"numero de puntos totales"


read *, nt

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

end program disco_hueco

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

real function fy(vy)


real vy,k,m,g
k=10.0
m=0.2
g=9.80665
fy=-(k/m)*vy-g
end function
real function gy(vy)
real vy
gy=vy
end function
real function fx(vx)
real vx,k,m
k=10.0
m=0.2
fx=-(k/m)*vx
end function
real function gx(vx)
real vx
gx=vx
end function

Вам также может понравиться