Está en la página 1de 4

Laboratorio numérico de oscilaciones forzadas.

Recordemos que un sistema masa-resorte sujeto a una fuerza externa periódica


está descrito por la ecuación diferencial

La solución de esta ecuación diferencial es un movimientos armónico simple de la forma:

Contrario al MAS no forzado la amplitud y el desfase no dependen de las condiciones


iniciales, sino que vienen unívocamente dados por los parámetros del sistema. Por un lado
la amplitud del movimiento viene dada por la siguiente expresión

Por su parte, el desfase del movimiento respecto a la fuerza que conduce el sistema viene
dado por

En este laboratorio numérico aprenderemos a simular numéricamente la solución del


movimiento armónico forzado a través del lenguaje de programación Python y observar de
manera empírica que las soluciones analíticas corresponden de manera exacta a la
aproximación numérica.

Objetivo

- Hacer uso del lenguaje de programación Python para resolver numéricamente la ecuación
diferencial que rige el sistema masa resorte sujeto a una forzante periódica.

El código.

Con el objetivo de "resolver" numéricamente el sistema masa-resorte es necesario importar


las librerías y los módulos que se utilizarán en el código computacional, para ello se hace
uso del bloque:

# Import the required modules


import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

A continuación defino la ecuación diferencial que quiero resolver, para ello creo una
función que se llama "masa_resorte_Forz"

# Define a function which calculates the derivative


def masa_resorte_Forz(y, t,vec_c):
#R = 2*np.sqrt(L/C) # 100 ohmios
x1, x2 = y
gamma, omega_0_2, F, m, omega = vec_c
dydt = [x2, -gamma*x2-omega_0_2*x1 + F/m*np.cos(omega*t)]
return dydt

Una vez definidas las ecuaciones a resolver, puedo empezar a definir los parámetros del
sistema que deseo simular, y los almaceno en un vector de números llamado param:

gamma = 2.
K = 30. #N/m
F_0 = 10. # Newtons
m = 1. # Kg
omega_0_sq = K/m
omega_simul = 2.
#omega_simul = np.sqrt(omega_0_sq)

param=[gamma, omega_0_sq, F, m, omega_res]

Dibujemos cómo deben ser la Amplitud y el desfase del movimiento de acuerdo a las
ecuaciones teóricas, para ello construyo con muchos valores omega y evalúo todos esos
valores en la ecuación teórica de A y delta. Finalmente, los dibujo:

omega_plot = np.linspace(0,20,500)

A = F_0/m/(np.sqrt(np.square(omega_0_sq - np.square(omega_plot)) +
gamma*gamma*np.square(omega_plot)))
delta = np.arctan((omega_plot*gamma)/(omega_0_sq -
np.square(omega_plot)))

plt.figure(1)
plt.title('Amplitud vs frecuencia')
plt.plot(omega_plot,A)
plt.savefig('Amplitud_vs_Omega.png')
plt.xlabel('omega')
plt.ylabel('Amplitud')

plt.figure(5)
plt.title('delta vs frecuencia')
plt.plot(omega_plot,delta)
plt.savefig('delta_vs_omega.png')
plt.xlabel('omega')
plt.ylabel('delta')

Procedo a definir las condiciones iniciales del sistema, el tiempo que quiero simular y hago
uso de la función odeint la cual resuelve numéricamente la ecuación diferencial. El
resultado de la solución será almacenado en un vector de datos llamado solucion

y0 = [0.2, 0.0]
t = np.linspace(0, 20, 1000)
solucion = odeint(masa_resorte_Forz, y0, t, args=(param,))

Dibuje la solución del movimiento en el tiempo y verifique que efectivamente, en estado


estacionario, la solución es un MAS:

# Plot the numerical solution


plt.figure(1)
plt.title('Evolución en el tiempo')
plt.plot(t, solucion[:, 0], 'r', label='freq. resonancia')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.savefig('Dinamica en el tiempo.png')

Qué pasa al inicio de la simulación? Es igual que el resto de la solución?


Discuta qué sucede.

Observe la amplitud de los picos de la solución numérica y compárelo con el valor


esperado teóricamente en el gráfico Amplitud vs Frecuencia. Compruebe sus
observaciones para diferentes valores de omega_simul. Compruebe que para el valor de
resonancia la amplitud es grande!
Ahora, utilizando un omega_simul pequeño (entre 0 y 2) sobreponga en gráfico de la
solución, el gráfico de la fuerza externa.

Fuerza = F_0/10.*np.cos(omega_simul*t)

plt.figure(2)
plt.title('Fuerza y Movimiento')
plt.plot(t, Fuerza, 'b', label='Fuerza')
plt.plot(t, solucion[:, 0], 'r', label='Solucion movimiento')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.savefig('desfase.png')

Qué tan desfasados son los picos de la forzante externa respecto a los de la solución del
movimiento? Qué pasa cerca de la resonancia? En qué se diferencia el desfase \phi que
se calculaba con las condiciones iniciales y este desfase \delta?

También podría gustarte