Intermédiaire · Vague de pendules

Leçon 5 : Des formules sur des tableaux

Construis en Python le motif « Vague de pendules » et apprends en chemin :

  • une formule de physique appliquée à tout un tableau
  • np.round et print pour une vérification rapide
  • plusieurs graphiques côte à côte avec plt.subplots
  • les f-strings
  • la phase : où en est un pendule dans son oscillation

Regarde-le d’abord

Lecture depuis YouTube après un clic.

pendulum-wave.py
"""Pendulum wave: 24 pendulums making 51, 52, ... 74 swings in 60 seconds.
Run: python pendulum-wave.py   (needs: pip install numpy matplotlib)
"""
import numpy as np
import matplotlib.pyplot as plt

plt.style.use("dark_background")

g, cycle = 9.81, 60.0  # gravity in m/s^2, seconds until they are back in step
n = np.arange(51, 75)  # swings per cycle, one more for each pendulum
period = cycle / n
length = g * (period / (2 * np.pi)) ** 2  # small swings: T = 2 pi sqrt(L / g)
print("lengths in cm:", np.round(length * 100, 1))

fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)
for ax, t in zip(axes, [0, 15, 20, 30]):
    swing = np.cos(2 * np.pi * t / period)  # where each bob is, from -1 to 1
    ax.scatter(swing, np.arange(len(n)), c=swing, cmap="cool", s=40)
    ax.set_title(f"t = {t} s")
    ax.set_xlim(-1.2, 1.2)
    ax.axis("off")
plt.show()

# Try: t = 60 s (or 75, 80, 90): the same pictures again, as every count is whole

Pas de Python sur cet ordinateur ? Le notebook exécute le même script, les exercices et les réponses dans ton navigateur, sur Google Colab. Le notebook est en anglais.

Ligne par ligne

  1. n = np.arange(51, 75)

    Les 24 nombres d’oscillations par minute : 51, 52, … 74.

  2. period = cycle / n

    La période de chaque pendule : 60 secondes divisées par son nombre d’oscillations.

  3. length = g * (period / (2 * np.pi)) ** 2

    La formule du pendule pour de petites oscillations, T = 2π√(L / g), résolue pour la longueur L.

  4. fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)

    Une figure avec quatre graphiques côte à côte ; la boucle remplit un graphique par instant.

  5. swing = np.cos(2 * np.pi * t / period)

    Où se trouve chaque masse à l’instant t, de −1 à 1 : après t / period oscillations, le cosinus d’autant de tours complets.

  6. ax.set_title(f"t = {t} s")

    Une f-string insère la valeur de t dans le titre.

À toi de jouer

  1. Quelle est la longueur du pendule le plus long et du plus court ?

    Indice

    Le script affiche les longueurs.

    Réponse

    34,4 cm pour 51 oscillations par minute, 16,3 cm pour 74.

  2. Ajoute l’instant t = 12 s. En combien de groupes la rangée se partage-t-elle ?

    Indice

    Il te faut un cinquième graphique : plt.subplots(1, 5) et [0, 12, 15, 20, 30].

    Réponse

    Cinq : à 12 s, un cinquième de la minute, deux voisins sont décalés d’un cinquième d’oscillation.

  3. Passe à 30 pendules.

    Indice

    Change la fin de np.arange.

    Réponse

    n = np.arange(51, 81) donne 30 nombres, de 51 à 80.

Quiz

1. Pourquoi tous les pendules sont-ils de nouveau alignés à 60 s ?
2. Que fait sharey=True ?
3. T = 2π√(L / g), résolue pour L, donne…
4. Avec t = 15, f"t = {t} s" donne…
5. À 30 s, deux voisins sont décalés d’une demi-oscillation. Que vois-tu ?

Cartes mémoire

Lis le recto, dis-toi le verso, puis retourne la carte.

  • plt.subplots(1, 4)

    Une figure et quatre graphiques (axes) sur une rangée, sur lesquels dessiner un par un.

  • f"t = {t} s"

    Une f-string : la valeur de t prend la place de {t}.

  • Période d’un pendule

    Pour de petites oscillations, T = 2π√(L / g) : quatre fois plus long veut dire deux fois plus lent.

  • Phase

    Où en est un pendule dans son oscillation ; ici, le cosinus de 2π·t / T.

  • np.round(x, 1)

    Arrondit chaque nombre d’un tableau à une décimale.

Ces cartes mémoire sur une page à part →