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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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: php

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: php

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: php

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: php

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: php

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