Mouvement harmonique¶
Tracé des courbes position, vitesse et accélération pour un mouvement harmonique non amorti
In [1]:
import numpy as np
from bokeh.layouts import row, column
from bokeh.models import CustomJS, Slider
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import push_notebook, show, output_notebook
from ipywidgets import interact
#from bokeh.resources import INLINE
output_notebook()
On considère un oscillateur harmonique simple constitué d'une masse $m$ fixée à un ressort de raideur $k$.
A $t=0$ on l'écarte de sa position de $x_0$ et on la lâche sans vitesse initiale.
L'équation différentielle s'écrit:
$$\ddot x + \Omega_0^2 x = 0$$
avec $$\Omega_0^2=\frac{k}{m}$$
In [2]:
#valeurs initiales
mass = 0.3 #kg
kressort = 10 #N/m
xzero = 3
omega0 = np.sqrt(kressort/mass)
t = np.linspace(0, 3, 500)
y1 = xzero*np.cos(omega0*t)
v1 = -xzero*omega0*np.sin(omega0*t)
a1 = - xzero*omega0**2*np.cos(omega0*t)
p = figure(y_range=(-4.5, 4.5), width=600, height=400)
pos = p.line(t, y1, line_width=3, legend_label="position")
vit = p.line(t, v1/7, line_width=3, color="orange",legend_label="vitesse")
acc = p.line(t, a1/50, line_width=3, color="green",legend_label="acceleration")
p.legend.location = "top_right"
p.legend.click_policy="hide"
def update(mass=0.3, kressort=10, xzero=3):
omega0 = np.sqrt(kressort/mass)
pos.data_source.data['y'] = xzero * np.cos(omega0*t)
vit.data_source.data['y'] = - xzero *omega0* np.sin(omega0*t)/7
acc.data_source.data['y'] = - xzero * omega0**2*np.cos(omega0*t)/50
push_notebook()
Utilisation du notebook:¶
faire varier les paramètres $m$, $k$ et $x_0$ et observer l'effet sur position / vitesse et accélération
In [3]:
show(p, notebook_handle=True)
interact(update, mass=(0.1,0.5,0.01), kressort=(1,100), xzero=(-3,3,0.1));
interactive(children=(FloatSlider(value=0.3, description='mass', max=0.5, min=0.1, step=0.01), IntSlider(value…
In [ ]: