Physique-chimie · 2de · Enseignement commun · Fiche n°2

De la mesure
au modèle mathématique.

Dans la fiche n°1, tu as tracé les positions de la bille en fonction du temps. Cette fois, tu vas recréer la chronophotographie elle-même dans Python, puis demander à l'ordinateur de trouver tout seul l'équation qui décrit cette chute, grâce à la fonction np.polyfit.

chronophotographie.py — aperçut = 0.00 s

Objectif de la fiche : représenter les positions successives d'un système modélisé par un point lors d'une évolution unidimensionnelle, puis modéliser cette évolution par un polynôme grâce à np.polyfit.

Cette fiche est autonome : tu n'as besoin d'aucun autre document, tout ce qu'il faut est ci-dessous, y compris le rappel du script de la fiche précédente. Chaque étape contient un script incomplet à compléter, puis à copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page si tu n'as pas Thonny sous la main).

00

On reprend là où on s'était arrêté

À savoir
  • Cette fiche prolonge la fiche n°1 : on repart des mêmes mesures de chute d'une bille, obtenues par chronophotographie.
  • Le script ci-dessous est déjà complet : copie-le tel quel dans Thonny (ou dans Basthon) pour commencer, tu n'as rien à deviner ici.
  • Garde cette fenêtre Thonny ouverte : tu vas ajouter du code à la suite à chaque étape.

Rappel des mesures

Les 16 positions y ont été pointées sur la chronophotographie de la chute, à intervalles de temps égaux. Le point n°0, en haut, sert d'origine.

point n° 01234567 89101112131415
y mesuré 0−0,7−1,5−2,3−3,5−4,5−5,9−7,7 −8,8−10,6−12,3−14,2−16,4−18,5−21−23,5

L'échelle de la photo vaut 2/100 : c'est ce facteur qui permet de passer de ymes (mesuré sur la photo, en unités arbitraires) à yreelle (en mètres).

etape0_reprise.py
import numpy as np
import matplotlib.pyplot as plt

# Ordonnées pointées sur la chronophotographie (unités de la photo)
ymes = np.array([-0, -0.7, -1.5, -2.3, -3.5, -4.5, -5.9, -7.7,
        -8.8, -10.6, -12.3, -14.2, -16.4, -18.5, -21, -23.5])

# Passage à l'échelle réelle (facteur 2/100)
yreelle = ymes * 2 / 100

# Base de temps : 16 instants entre 0 s et 0,25 s
t = np.linspace(0, 1/4, 16)

print('yreelle :', yreelle)
print('t :', t)
Résultat attendu

Deux lignes s'affichent dans la console : la liste des 16 positions réelles (en mètres, négatives), puis la liste des 16 instants de 0 à 0,25 seconde.

01

Recréer la chronophotographie

Consigne
  • La fonction plt.plot a besoin de deux tableaux de même longueur : une liste d'abscisses et une liste d'ordonnées.
  • Ici, on veut que tous les points aient la même abscisse (x = 0), pour recréer la colonne verticale de la chronophotographie. Écris x = 0*t : cela engendre un tableau de 16 zéros, de la même longueur que t.
  • Trace yreelle en fonction de x, en ronds rouges ('ro'), avec la légende "y=f(x)".
  • Complète les étiquettes des axes ("position" en abscisse, "yreelle" en ordonnée), la grille, la légende et le titre "chute libre".
etape1_chronophoto.py
# TODO : abscisse constante et nulle, de même longueur que t
x = ____ * t

# TODO : trace yreelle en fonction de x, en ronds rouges, avec une légende
plt.plot(____, ____, '__', label="____")
plt.xlabel("____")
plt.ylabel("____")
plt.grid()
plt.legend()
plt.title("____")
plt.show()
Indice

Écrire x = 0 tout court ne donnerait qu'un seul nombre, pas un tableau de 16 valeurs : plt.plot refuserait de tracer deux tableaux de longueurs différentes. 0*t résout le problème car il garde la longueur de t.

Résultat attendu

Une colonne verticale de points rouges alignés sur l'axe x = 0, du plus haut (y proche de 0) au plus bas (y proche de −0,47) : c'est exactement la chronophotographie de la chute, reconstituée par Python.

02

Laisser l'ordinateur trouver le modèle

Consigne
  • La fonction np.polyfit(t, yreelle, 2) cherche automatiquement le polynôme de degré 2 (de la forme a·t² + b·t + c) qui passe au plus près des points mesurés.
  • Nomme le résultat mod : c'est un tableau de 3 valeurs [a, b, c].
  • Affiche mod avec print, puis affiche séparément g = -2×mod[0], vo = mod[1] et yo = mod[2].

D'où viennent ces formules ?

La seconde loi de Newton donne, pour une chute libre verticale, la position y(t) = -½·g·t² + v0·t + y0. En comparant avec le polynôme a·t² + b·t + c renvoyé par np.polyfit, on identifie : a = -g/2 (donc g = -2a), b = v0 et c = y0.

etape2_modele_auto.py
# TODO : cherche le polynôme de degré 2 qui modélise yreelle en fonction de t
mod = np.polyfit(____, ____, __)
print('mod :', mod)

# TODO : déduis-en g, v0 et y0 à partir des coefficients de mod
print('g = ', ____ * __)
print('vo = ', ____)
print('yo = ', ____)
Indice

La numérotation Python commence toujours à 0 : le premier coefficient a renvoyé par np.polyfit est mod[0], le deuxième mod[1], le troisième mod[2]. Pense au signe « moins » devant le 2 pour g.

Résultat attendu

La valeur de g affichée doit être un nombre positif proche de 9,8 (l'ordre de grandeur de l'accélération de la pesanteur sur Terre), même si elle n'est pas exactement égale à la valeur tabulée — une bonne occasion de réfléchir aux chiffres significatifs.

03

Superposer mesures et modèle

Consigne
  • Calcule ymod, les valeurs prédites par le modèle pour chaque instant t : ymod = mod[0]*t**2 + mod[1]*t + mod[2].
  • Trace sur le même graphe les points mesurés yreelle en fonction de t (ronds rouges, légende "yréelle=f(t)") et la courbe du modèle ymod en fonction de t (ligne bleue continue, indice 'b-', légende "ymod=f(t)").
  • Ajoute les étiquettes d'axes ("temps" / "yreelle"), la grille, la légende et le titre "chute libre et son modèle".
etape3_superposition.py
# TODO : valeurs prédites par le modèle, pour chaque instant t
ymod = mod[0]*t**2 + ____*t + ____

# TODO : trace les points mesurés puis la courbe du modèle sur le même graphe
plt.plot(____, ____, '__', label="____")
plt.plot(____, ____, '__', label="____")
plt.xlabel("____")
plt.ylabel("____")
plt.grid()
plt.legend()
plt.title("____")
plt.show()
Indice

Deux appels successifs à plt.plot(...) avant un seul plt.show() tracent bien les deux courbes sur la même figure. Le style 'b-' se lit blue (bleu) + - (ligne continue), à la différence de 'ro' qui trace des points isolés.

Résultat attendu

Une courbe bleue lisse qui passe très près de chacun des points rouges mesurés : le modèle du second degré décrit bien la chute libre de la bille.

Pense-bête — de np.polyfit à la physique

mod[0]coefficient a, avec g = −2a
mod[1]coefficient b, soit la vitesse initiale v0
mod[2]coefficient c, soit la position initiale y0
'ro'points rouges (mesures)
'b-'ligne bleue continue (modèle)
t**2t au carré, en Python

Pas de Thonny sous la main ? Utilise Basthon

Ouvrir dans un nouvel onglet ↗
Basthon est une console Python qui tourne directement dans le navigateur, sans rien installer. Colle ici (avec Ctrl+V ou Cmd+V) le code copié avec les boutons « Copier le code » ci-dessus, puis appuie sur Entrée pour l'exécuter.