Demo entry 2792992

codigo

   

Submitted by yo on Oct 01, 2015 at 05:13
Language: Python. Code size: 1.5 kB.

import numpy as np
from scipy.optimize import bisect
"""
Script que contiene:
función f a la que se quiere encontrar la raiz (Yparticula-Ypiso)
función que calcula la velocidad que tendrá la partícula luego del choque 
con el piso v(n+1)y posición cuando sucede el choque y(n+1), dado 
"""

def f(t, y_n,v_n,w):
    """
    Función que recibe posición y velocidad inicial de la partícula,
    frecuencia de oscilación del piso y tiempo.
    Entrega el valor de la función (Yparticula-Ypiso) en un tiempo dado.
    """
    return v_n*t-t**2/2+y_n-[np.sin(w*t+np.arcsin(y_n))]

def choque(y_n,v_n, w,eta):
    """
    Función que recibe (y_n) y (v_n), además de los parámetros
    coeficiente de restitución (eta) y frecuencia (w)
    Encuentra el cero de la función f y entrega y_(n+1) y v_(n+1)
    """
    t=0
    while f(t,y_n,v_n,w)>=0: # recorre la función en el tiempo hasta que se hace negativa
        t+=0.01
    t_choque = bisect(f, t-0.01,t, args=(y_n)) # encuentra el cero de la funcion entre t y el instante anterior
    vs=np.cos(w*t_choque+np.arcsin(y_n))*w #  velocidad del suelo en el tiempo de choque
    vp_antes=-(t_choque)+v_n   # velocidad de la partícula justo antes del rebote
    vp_despues=(1+eta)*vs-eta*vp_antes # velocidad de la partícula después del rebote
    y_n_siguiente=np.sin(w*t_choque+np.arcsin(y_n)) #posición de la partícula en el instante del choque
    return [y_n_siguiente,vp_despues]

This snippet took 0.00 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).