Trabajos Física Computacional (3º Física)

Iniciado por JD The Ripper PC, Septiembre 22, 2017, 07:41:39 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Buenas, a principios de mes un amigo que estudia 3º de Física en la universidad me pidió ayuda para hacer algunos trabajos de la asignatura Física Computacional y yo acepté ayudarle a cambio de café y galletitas.

Le dieron la opción de elegir el lenguaje de programación a usar con preferencia sobre Fortran y Python, yo le propuse hacerlo en javascript e ir haciendo una web, pero me dijo que no.  :'(

Versión de python: 2.7
Github You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Aprovecho que le ayudo para publicar los trabajos aquí a modo de log por si a alguien le llega a interesar gráficas y pequeños simuladores de pelotitas que suben y bajan.

Iré actualizando el post a medida que vaya ayudandole con más trabajos tanto nuevos como para mejorar los que ya están empezados.


Trabajos:

  • 2ª Ley de Newton


2ª Ley de Newton

El problema consiste en un cuerpo situado sobre el plano del eje x al cual se le aplica una velocidad inicial en vertical hacia arriba de 25m/s.
Calcula la posición y la velocidad cada 0.001s en cada punto, finalmente cuando el cuerpo aterrize mostrar el tiempo total transcurrido y la velocidad de llegada al suelo.

(Al principio puede asustar un poco tanta palabrería, pero el problema es más fácil de lo que parece)

Los datos del ejercicio son los siguientes:
Velocidad inicial = 25m/s
Posición (y) inicial = 0m
Aceleración = -9.8m/s**2 (gravedad)
Diferencial de tiempo = 0.001s

Para la 1ª versión del ejercicio simplemente definimos 3 funciones, cada una de ellas nos calculaba la velocidad y la posición cada 0.001s y nos imprimía los datos del tiempo transcurrido y la velocidad al aterrizar.

Nota:
Se necesitan 3 funciones, porqué una de ellas es la que obtiene el resultado con 1 ciclo de tiempo adelantado, otra con 1 ciclo de tiempo atrasado y otra con el tiempo correcto (la media del adelantado y del atrasado).

Nos definimos las constantes:
Código: text

dt = .001
a = -9.8
y0 = 0
v0 = 25


A continuación nos definimos cada una de las 3 funciones:

Definición de la función FORWARD(1 ciclo de tiempo adelantado):
Código: text

def forward(y, v):
    i=0 #Contador de ciclos para calcular el tiempo en función de dt
    while(y>=0):
        i+=1
        yn = y + v * dt
        vn = v + a * dt
        print "Posicion: ", yn, "Velocidad: ", vn
        y, v = yn, vn
    print "Tiempo: ", dt*i, "Velocidad: ", vn


Definición de la función BACKWARD(1 ciclo de tiempo atrasado):
Código: text

def backward(y, v):
    i=0 #Contador de ciclos para calcular el tiempo en función de dt
    while(y>=0):
        i+=1
        vn = v + a * dt
        yn = y + vn * dt
        print "Posicion: ", yn, "Velocidad: ", vn
        y, v = yn, vn
    print "Tiempo: ", dt*i, "Velocidad: ", vn


Definición de la función CENTERED(Tiempo y velocidad correcto):
Código: text

def centered(y, v):
    i=0 #Contador de ciclos para calcular el tiempo en función de dt
    while(y>=0):
        i+=1
        vn = v + a * dt
        yn = y + (vn + v) * dt / 2
        print "Posicion: ", yn, "Velocidad: ", vn
        y, v = yn, vn
    print "Tiempo: ", dt*i, "Velocidad: ", vn


Finalmente, la llamada a las funciones:
Código: text

print "Forward"
forward(y0, v0)
print "Backward"
backward(y0, v0)
print "Centered"
centered(y0, v0)