Python para ingenieros mecánicos
# Fuente: http://ifcuriousthenlearn.com/blog/2015/06/09/mechanical-vibrations-with-python/
Vibraciones mecánicas con Python
Resolver las ecuaciones diferenciales de segundo orden es un problema común en la ingeniería mecánica, y aunque es inapropiado comprender cómo resolver estos problemas analíticamente, usar el software para resolverlos es MOR es práctico, especialmente cuando se considera que los parámetros a menudo son desconocidos y necesitan ser probados.
Este es un ejemplo simple de resolver una ecuación diferencial de segundo orden que representa un sistema de amamantamiento de primavera con lenguaje de programación de Python. ¡Python es una herramienta poderosa para la ciencia y la ingeniería y es relativley fácil de usar y gratis!
El sistema de que este está modelado se basa en un resorte y un amortiguador en paralelo unido a una masa.
>>import matplotlib.pylab as pylab
>># forces plots to appear in the ipython notebook
>>%matplotlib inline
>>from scipy.integrate import odeint
>>from pylab import plot,xlabel,ylabel,title,legend,figure,subplots
>>from pylab import cos, pi, arange, sqrt, pi, array, array
>>def MassSpringDamper(state,t):
'''
>> k=spring constant, Newtons per metre
>> m=mass, Kilograms
>> c=dampign coefficient, Newton*second / meter
>> for a mass,spring
>> xdd = ((-k*x)/m) + g
>> for a mass, spring, damper
>> xdd = -k*x/m -c*xd-g
>> for a mass, spring, dmaper with forcing function
>> xdd = -k*x/m -c*xd-g + cos(4*t-pi/4)
'''
>> k=124e3 # spring constant, kN/m
>> m=64.2 # mass, Kg
>> c=3 # damping coefficient
>> # unpack the state vector
>> x,xd = state # displacement,x and velocity x'
>> g = 9.8 # metres per second**2
>> # compute acceleration xdd = x''
>> omega = 1.0 # frequency
>> phi = 0.0 # phase shift
>> A = 5.0 # amplitude
>> xdd = -k*x/m -c*xd-g + A*cos(2*pi*omega*t - phi)
>> return [xd, xdd]
Las condiciones iniciales de desplazamiento y velocidad se definen en el estado Varaible0
>>state0 = [0.0, 1.2] #initial conditions [x0 , v0] [m, m/sec] >>ti = 0.0 # initial time >>tf = 4.0 # final time >>step = 0.001 # step >>t = np.arange(ti, tf, step) >>state = odeint(MassSpringDamper, state0, t) >>x = array(state[:,[0]]) >>xd = array(state[:,[1]])
Resolver una ecuación diferencial es lo suficientemente desafiante, pero para mí, no es tan útil a menos que tenga algunas tramas agradables para visualizar los resultados
>># Plotting displacement and velocity >>pylab.rcParams['figure.figsize'] = (15, 12) >>pylab.rcParams['font.size'] = 18 >>fig, ax1 = pylab.subplots() >>ax2 = ax1.twinx() >>ax1.plot(t,x*1e3,'b',label = r'$x (mm)$', linewidth=2.0) >>ax2.plot(t,xd,'g--',label = r'$\dot{x} (m/sec)$', linewidth=2.0) >>ax2.legend(loc='lower right') >>ax1.legend() >>ax1.set_xlabel('time , sec') >>ax1.set_ylabel('disp (mm)',color='b') >>ax2.set_ylabel('velocity (m/s)',color='g') >>pylab.title('Mass-Spring System with $V_0=1.2 \frac{m}{s}$ and $\delta_{max}=22.9mm$') >>pylab.grid()
No hay comentarios.:
Publicar un comentario