Sistema massa molla forzato

dati:

$k$ costante elastica molla

$m$ massa che oscilla

$b$ coefficiente di attrito

$omegaS = \sqrt{\dfrac{k}{m}} $ pulsazione propria del sistema ricordare che la frequenza è $\nu = 2 \pi \omega$

$omegaF$ pulsazione forzante

In [1]:
import numpy as np
import matplotlib.pyplot as plt
import math
In [2]:
m = 0.1
k = 1.3
b = 0.02
x0 = 10*10**-2
omegaS = math.sqrt(k/m)
print(omegaS)
T = 2*math.pi/omegaS
print(T)
k2 = -((b**2/m**2-4*k/m))/4
3.605551275463989
1.7426420614059965
3.6041642581880198
In [3]:
def Forzante(A,omegaF,x):
    F = A*math.cos(omegaF*x)
    return F
In [4]:
A = x0/10
omegaF = omegaS

Simulazione del moto

utilizziamo il metodo alle differenze finite con:

$a = \dfrac{1}{m} \left( -kx-bv +A \cos\left(\underline{\omega}t \right) \right)$

$x \leftarrow x + vt$

$v \leftarrow v + at$

dove $A$ e $\underline{\omega}$ sono rispettivamente l'ampiezza e la pulsazione della forzante.

In [5]:
x = x0
v = 0
dt = 0.01 #s
t = 0.0
tOsservazione = 80*T #s
posizione = []
tempo = []
a = 0
while t<tOsservazione:
    posizione.append(x)
    a=(-b*v-k*x+Forzante(A,omegaS,t))/m
    x=x+v*dt
    v=v+a*dt
    tempo.append(t)
    t=t+dt
posizione = np.array(posizione, dtype=np.float64)
tempo = np.array(tempo, dtype=np.float64)
plt.figure(figsize=(20,10))
plt.plot(tempo, posizione, 'b-', label='line 2')
plt.show()
In [ ]: