Danse des pendules (swinging pendulum)¶

Pr Marc BUFFAT, dpt Mécanique, université Lyon 1

In [18]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='serif', size='16')
from IPython.display import display, HTML, YouTubeVideo, Video, IFrame
In [2]:
YouTubeVideo('yVkdfJ9PkRQ',width=800,height=600)
Out[2]:

Swinging Pendulum¶

L'objectif de cette étude est de construire un modèle explicatif du mouvement de pendules dansants (swinging pendulum). Une expérience illustrant cette danse des pendules a été réalisée pour un cours d'introduction à la physique: Harward Natural Sciences Lectures by Tom Fuller

Quinze pendules simples non couplés de longueurs monotones croissantes dansent ensemble pour produire des ondes visuelles progressives, des ondes stationnaires, des battements et (apparemment) des mouvements aléatoires.

  • vidéo youtube avec de la musique fonction du mouvement

    • https://www.youtube.com/watch?v=2TEkwdLlw6w

Video courtesy of Harvard Natural Sciences Lecture Demonstrations, © 2010 President and Fellows of Harvard College

Construction du modèle¶

Pour construire un modèle, nous allons tout d'abord étudier le mouvement du pendule simple, en utilisant les possibilités de visualisation des notebooks Python.

Puis nous nous intéresserons au mouvement de 2 pendules de longueurs différentes pour ensuite passer au cas d'une série de 15 pendules de longueurs croissantes permettant de retrouver les mouvements observés dans la vidéo.

Mouvement du pendule simple¶

On considère un pendule simple, constitué d'une masse $m$ fixée à l’extrémité d'un fil de longueur $l_1$ fixé en O et soumis à la gravité $g$.

La position $P$ de la masse s'écrit en fonction de l'angle $\theta_1$ du fil par rapport à la verticale $y$:

$$ \overrightarrow{OP} = \left[\begin{array}{l}x_1\\y_1\end{array}\right] = \left[\begin{array}{l}+l_1\sin\theta_1\\-l_1\cos\theta_1\end{array}\right] $$

Equation du mouvement¶

Soit $\overrightarrow{e_t}$ le vecteur tangentiel (dans la direction de la vitesse), et $\overrightarrow{e_n}$ le vecteur normal (dans la direction du fil), la vitesse du pendule s'écrit:

$$\overrightarrow{v}=l_1\frac{d\theta_1}{dt}\overrightarrow{e_t}$$

Les forces exercées sur le pendule sont la gravité $- m g \overrightarrow{e_y}$ suivant la verticale $\overrightarrow{e_y}$ et la tension dans le fil $T \overrightarrow{e_n}$ dans la direction du fil $\overrightarrow{e_n}$

Le principe fondamental de la dynamique (loi de Newton) s'écrit:

$$ \frac{d}{dt}(m l_1 \frac{d\theta_1}{dt}\overrightarrow{e_t})= -m g \overrightarrow{e_y} + T \overrightarrow{e_n} $$

En projetant cette équation dans la direction de la vitesse $\overrightarrow{e_t}$, on élimine la tension et on obtiens l'équation d'évolution de l'angle $\theta(t)$, sous la forme d'une équation différentielle du second ordre.

$$ m l_1 \frac{d^2\theta_1}{dt^2} = - m g \sin\theta_1 $$

Dans le cas de petites oscillations, l'angle $\theta_1$ reste petit et on peut approximer $\sin\theta_1 \approx \theta_1$ , ce qui permet de linéariser l'équation différentielle précédente:

$$ \frac{d^2\theta_1}{dt^2} = -\omega_1^2 \theta_1 \mbox{ avec } \omega_1=\sqrt{\frac{g}{l_1}}$$

dont le paramétre est la pulsation $\omega_1$.

solution

En supposant que le pendule est laché avec un angle $\theta_1(t=0)=\theta_0$ à l'instant initial sans vitesse initiale $\dot{\theta_1}(t=0)=0$, la solution de l'équation linéarisée est la solution classique du pendule simple:

$$\theta_1(t) = \theta_0\cos(\omega_1 t)$$

qui indique que le pendule oscille de façon périodique sinusoïdale avec une période $T_1$: $$T_1 = \frac{2\pi}{\omega_1} = 2 \pi \sqrt{\frac{l_1}{g}}$$

qui dépend donc de sa longueur $l_1$.

Conservation de l'énergie¶

La tension dans le fil étant perpendiculaire à la vitesse, son travail est nul. La gravité découle d'un potentiel, et donc le système est conservatif.

L'énergie totale, somme de l'énergie cinétique et l'énergie potentiel de gravite, reste constante au cours du mouvement

$$ E_t = \frac{1}{2} m v_1^2 + m g y_1 = cste$$

Calcul de la solution¶

on va calculer numériquement la solution en choisissant les valeurs numériques des paramètres et en traduisant les formules mathématiques en expressions python en utilisant des notations vectorielles de la bibliothéque numpy.

  • solution $\theta_1$

\begin{align} \theta_1(t) &= \theta_0\cos(\omega_1 t) \\ \dot{\theta_1}(t) &= -\omega_1\theta_0\sin(\omega_1 t) \end{align}

  • position

\begin{align} X_1 &= l_1 \sin(\theta_1)\\ Y_1 &= -l_1 \cos(\theta_1) \end{align}

  • vitesse

$$ V_1 = l_1 \dot{\theta_1}$$

  • énergie

\begin{align} Ec &= 0.5 m_1 V_1^2 \\ Ep &= m_1 g Y_1 \end{align}

In [3]:
# definition des parametres
g  = 10.0
l1 = 0.1
m1 = 1.0
theta0 = np.pi/8
omega1 = np.sqrt(g/l1)
# periode 
T0 = 2*np.pi/omega1
# temps de simulation
M = 5
tf = M*T0
# solution 
TT = np.linspace(0,tf,50*M+1)
THETA1 = theta0*np.cos(omega1*TT)
In [4]:
plt.figure(figsize=(10,6))
plt.plot(TT,THETA1)
plt.title("solution pendule simple")
plt.xlabel("t en s.")
plt.ylabel("$\\theta_1(t)$ en radian");
In [5]:
X1 =  l1*np.sin(THETA1)
Y1 = -l1*np.cos(THETA1)
plt.figure(figsize=(10,6))
plt.plot(X1,Y1)
plt.title("Trajectoire")
plt.xlabel("X1 en m")
plt.ylabel("Y1 en m")
plt.axis('equal');
In [6]:
# calcul energie
V1 = -l1*omega1*theta0*np.sin(omega1*TT)
Ec = 0.5*m1*V1**2
Ep = m1*g*Y1
plt.figure(figsize=(10,6))
plt.plot(TT,Ec,label="Ec")
plt.plot(TT,Ep,label="Ep")
plt.plot(TT,Ec+Ep,'--',label="Ec+Ep")
plt.title("Variation d'énergie")
plt.xlabel('t en s.')
plt.legend();

Trajectoire, vitesse et accélération du pendule simple¶

L'animation suivante montre l'évolution du vecteur vitesse (en cyan) et accélération (en vert)

In [7]:
Video("pendulum.mp4",embed=True,width=640,height=480)
Out[7]:
Your browser does not support the video tag.

Cas de 2 pendules simples¶

En prenant 2 pendules de longueurs $l_1$ et $l_2$, accrochés à une même barre et lachés avec le même angle $\theta_0$.

Les angles de rotations $\theta_1(t)$ et $\theta_2(t)$ sont donnés par:

$$ \theta_1(t) = \theta_0 \cos{\sqrt{\frac{g}{l_1} t }} $$ $$ \theta_2(t) = \theta_0 \cos{\sqrt{\frac{g}{l_2} t }} $$

Si on choisit bien les longueurs $l_1$ et $l_2$ , on peut avoir des mouvements en phase ou en opposition de phase avec une période commune. Pour cela il faut que les périodes des 2 pendules soient dans un rapport rationnel: $$ \frac{T_1}{T_2} = \frac{m}{p} \mbox{ avec } m,p \in \mathbb{N^+}$$

ce qui impose le rapport des longueurs. On choisit par exemple: $$ \frac{l_2}{l_1} = \frac{m^2}{(m-1)^2} \mbox{ avec } m=20 $$

Si on part du même angle $\theta_0$ à $t=0$, alors au bout d'un temps $t_f = m T_2$ les 2 pendules se retrouvent à la mếme position $\theta_0$.

C'est ce que l'on va vérifier en traçant les différentes trajectoires des deux pendules

Calcul de la solution¶

In [8]:
# parametres
M  = 20
l2 = l1*M**2/(M-1)**2
omega2 = np.sqrt(g/l2)
# solution 
T0 = 2*np.pi/omega2
tf = M*T0
TT = np.linspace(0,tf,50*M+1)
THETA1 = theta0*np.cos(omega1*TT)
THETA2 = theta0*np.cos(omega2*TT)
In [9]:
plt.figure(figsize=(10,6))
plt.plot(TT,THETA1,label="$\\theta_1$")
plt.plot(TT,THETA2,label="$\\theta_2$")
plt.legend()
plt.title("solution pendule simple")
plt.xlabel("t en s.")
plt.ylabel("$\\theta(t)$ en radian");
#plt.savefig("pendule2.png")
In [10]:
plt.figure(figsize=(10,6))
plt.plot(THETA1,THETA2)
plt.xlabel("$\\theta_1(t)$ en radian")
plt.ylabel("$\\theta_2(t)$ en radian")
plt.title("Courbe de Lissajoux");
#plt.savefig("lissajoux.png")

Animation du mouvement des 2 pendules¶

L'animation suivante montre la trajectoire des pendules

In [11]:
Video("swing_pendulum2.mp4",embed=True,width=640,height=480)
Out[11]:
Your browser does not support the video tag.

Swinging Pendulum¶

On considère N pendules simples de longueur $l_i$ accrochés sur une même barre. A l'instant initiale, on les lâche avec le même angle $\theta_0$. Leur mouvement $\theta_i(t)$ , en petites oscillations, est donné par l'équation $$\theta_i(t) = \theta_0 \cos{\sqrt{\frac{g}{l_i} t }} $$

En choisissant les longueurs $l_i$ telle que s

$$ l_i = l_0 \frac{ M^2}{(M-i)^2} \mbox{ avec } M > N$$

les pendules vont se retrouver en phase au bout de $M$ périodes du plus grand $l$. En effet leurs périodes sont dans un rapport rationnel du type $\frac{M}{M-i}$

Leur mouvement d'ensemble ressemble alors à une propagation d'ondes, d'où le nom "swinging pendulum"

Animation du mouvement des 15 pendules¶

L'animation suivante montre la trajectoire des pendules. Les quinze pendules simples non couplés de longueurs monotones croissantes dansent ensemble pour produire des ondes visuelles progressives, des ondes stationnaires, des battements et (apparemment) des mouvements aléatoires de la même façon que sur la vidéo de l'expérience.

In [12]:
Video("swing_pendulum.mp4",embed=True,width=640,height=480)
Out[12]:
Your browser does not support the video tag.

Conclusion¶

A l'aide d'une expérience numérique utilisant des notebooks Jupyter, un peu de code Python et des visualisations de simulation numérique, on a pu expliquer la danse des pendules observée sur la vidéo de l'expérience initiale. On a ainsi montré que

  • le mouvement du pendule simple est sinusoïdal avec une période dépend de la racine carrée de sa longueur
  • dans le cas de 2 pendules dont le rapport des longueurs est un rapport rationnel élevé au carré, on obtiens une courbe classique de Lissajous.
  • en prenant une série de 15 pendules de longueurs croissantes dans un rapport rationnel élevé au carré, on retrouve les mouvements observés dans la vidéo initiale.
  • il n'y a aucune interaction entre les pendules: leurs mouvements sont indépendants!

Vidéo de présentation¶

vidéo utilisant ce notebook en mode présentation avec des sous-titres

  1. version initiale de la danse des pendules avec sous titre (media-center Lyon1)

  2. version youtube

In [20]:
IFrame('https://myvideo.univ-lyon1.fr/permalink/v126648a9a047xeg3hk0/iframe/#start=1',width='640',height='480')
Out[20]:
In [13]:
YouTubeVideo('KdWZLV7RfkE',width=640,height=400)
Out[13]: