Objectif de la fiche : représenter, à partir de données expérimentales, l'évolution des grandeurs énergétiques (cinétique, potentielle, mécanique) d'un système en mouvement dans un champ de pesanteur uniforme, pour tester l'hypothèse de la conservation de l'énergie mécanique.
Cette fiche est autonome : tu n'as besoin d'aucun autre document, les coordonnées obtenues par pointage vidéo sont recopiées directement dans le script. 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).
Contexte : les trois énergies d'un projectile
- Une balle de golf en vol possède une énergie cinétique
Ec = ½·m·v², liée à sa vitesse, et une énergie potentielle de pesanteurEp = m·g·y, liée à son altitude. Leur somme est l'énergie mécaniqueEm = Ec + Ep. - Si le poids est la seule force qui agit vraiment sur la balle (on néglige les frottements de l'air), l'énergie mécanique doit rester constante tout au long du vol : ce que l'un des deux termes perd, l'autre le gagne.
- Une analyse cinématique du même mouvement (non reprise ici) montre que l'accélération de la balle est pratiquement verticale et proche de
-g— un résultat cohérent avec l'hypothèse d'un poids seul. Cette fiche teste cette même hypothèse, mais d'un autre point de vue : celui de l'énergie.
Les données du pointage
- Ces coordonnées
(x, y), exprimées en mètres, proviennent d'un pointage vidéo de la balle de golf image par image ;tcontient les instants correspondants, espacés de 0,1 s (13 points au total). - Le script ci-dessous est déjà complet : copie-le tel quel dans Thonny (ou dans Basthon) pour commencer.
import numpy as np
import matplotlib.pyplot as plt
# valeurs expérimentales (pointage vidéo)
x = np.array([0.41, 0.91, 1.39, 1.86, 2.33, 2.81, 3.33, 3.79, 4.31, 4.83, 5.36, 5.86, 6.34])
y = np.array([0.52, 1.01, 1.42, 1.77, 2.02, 2.16, 2.19, 2.13, 1.96, 1.71, 1.38, 0.97, 0.50])
t = 0.1 * np.arange(len(x))
Construire les vecteurs vitesse
- La vitesse n'est pas mesurée directement : on l'estime par une différence centrée. Pour approcher la vitesse horizontale au point
i+1, on compare la position juste avant (i) et juste après (i+2) :vx ≈ (x[i+2] - x[i]) / (t[i+2] - t[i]). - Ce calcul a besoin d'un point avant et d'un point après : il est donc impossible de l'effectuer sur le tout premier point (pas de point avant) ni sur le tout dernier (pas de point après). C'est pourquoi la boucle porte sur
len(t) - 2valeurs : la liste des vitesses obtenue aura systématiquement deux valeurs de moins que celle des positions.
- Construis
vxletvylpar différences centrées, à l'aide d'une boucleforet de.append(...). - Convertis ensuite ces deux listes en tableaux numpy avec
np.array(...), en les nommantvxlletvyll: c'est indispensable pour pouvoir effectuer des opérations terme à terme dessus (les élever au carré, les sommer, en prendre la racine) — des opérations qu'une simple liste Python ne sait pas faire directement.
vxl = []
m = np.arange(len(t) - _)
for i in m :
vx = (x[i+_] - x[_]) / (t[i+_] - t[_])
vxl.append(__)
vxll = np.array(___)
vyl = []
for i in m :
vy = (y[i+_] - y[_]) / (t[i+_] - t[_])
vyl.append(__)
vyll = np.array(___)
Indice
vxl et vyl sont des listes Python ordinaires, sur lesquelles vxl**2 provoquerait une erreur : seuls les tableaux numpy (np.array) acceptent ce genre d'opération élément par élément. C'est tout l'intérêt de vxll et vyll.
vxll et vyll contiennent chacun 11 valeurs (13 points de départ, moins 2). Pour vérifier : vxll[0] doit valoir 4.9 et vyll[0] doit valoir 4.5 (en m/s).
Calculer les trois énergies
- Fixe la masse d'une balle de golf,
m = 0.046(kg), etg = 9.8. - Calcule la norme de la vitesse
v = (vxll**2 + vyll**2)**(1/2), puis l'énergie cinétiqueec = 0.5*m*v**2. - Comme
vxlletvyllont 2 valeurs de moins queyett(à cause du redimensionnement des différences centrées), créey2 = y[1:-1]ett2 = t[1:-1]— en retirant le premier et le dernier élément — pour que toutes les grandeurs se correspondent. - Calcule l'énergie potentielle
ep = m*g*y2, puis l'énergie mécaniqueem = ec + ep.
m = _____
g = ___
# TODO : norme de la vitesse et énergie cinétique
v = (vxll**_ + vyll**_)**(1/_)
ec = 0.5*m*v**_
# TODO : redimensionne y et t pour qu'ils correspondent à vxll/vyll
y2 = y[_:__]
t2 = t[_:__]
# TODO : énergie potentielle et énergie mécanique
ep = m*g*__
em = __ + __
Aucun affichage direct, mais ec, ep et em contiennent chacune 11 valeurs, prêtes à être tracées à l'étape suivante. Pour vérifier : ec[0] ≈ 1.02, ep[0] ≈ 0.455 et em[0] ≈ 1.47 (en joules).
Tracer et tester la conservation
np.polyfit(t2, em, 0)ajuste les points(t2, em)par un polynôme de degré 0, c'est-à-dire une constante — concrètement, la valeur qui minimise les écarts avec toutes les mesures, ce qui correspond à leur moyenne. La fonction renvoie une liste d'un seul coefficient, qu'on récupère avecmod[0].- Pour tracer une droite horizontale à cette hauteur sur toute la durée du mouvement, on construit un tableau de la même taille que
t2mais rempli de zéros décalés de cette constante :0*t2 + mod[0].
- Trace
ec,epetemen fonction det2, respectivement en bleu, vert et rouge (points reliés,'bo-','go-','ro-'), avec une légende pour chacune. - Pour tester quantitativement si
emreste constante, modélise-la par une constante avecnp.polyfit(t2, em, 0), et superpose cette droite horizontale, en noir, avec la légende'Modèle'.
plt.plot(t2, ec, '____', label='__')
plt.plot(t2, ep, '____', label='__')
plt.plot(t2, em, '____', label='__')
# TODO : modélise em par une constante
mod = np.polyfit(__, __, _)
emmod = 0*t2 + mod[_]
plt.plot(t2, emmod, '_', label='_______')
plt.xlabel("temps")
plt.ylabel("énergie")
plt.title("évolution des énergies au cours du mouvement")
plt.legend()
plt.grid()
plt.show()
La courbe bleue (Ec) descend puis remonte, la verte (Ep) fait l'inverse — exactement le comportement attendu d'un échange d'énergie. La courbe rouge (Em) oscille légèrement autour de la droite noire du modèle, sans tendance nette à la hausse ou à la baisse.
Conclusion
- On observe que l'énergie mécanique n'évolue pas significativement au cours du temps, car on ne note aucune tendance marquée, notamment à la baisse — ce qui aurait pu trahir l'action de frottements dissipatifs.
- Ce résultat est cohérent avec l'hypothèse d'un poids agissant seul sur la balle : les petites fluctuations observées autour du modèle constant s'expliquent raisonnablement par les incertitudes de pointage, plutôt que par une réelle perte d'énergie.
Pense-bête — énergie cinétique, potentielle, mécanique
| Ec = ½·m·v² | énergie cinétique |
| Ep = m·g·y | énergie potentielle de pesanteur |
| Em = Ec + Ep | énergie mécanique |
| np.array(liste) | convertit une liste en tableau, pour les opérations terme à terme |
| y[1:-1] | retire le premier et le dernier élément |
| (x[i+2]-x[i])/(t[i+2]-t[i]) | différence centrée : approxime une vitesse instantanée |
| np.polyfit(x,y,0) | ajuste par une constante = la moyenne de y ; valeur dans mod[0] |
| Em constante | signature de la conservation de l'énergie mécanique |
Pas de Thonny sous la main ? Utilise Basthon
Ouvrir dans un nouvel onglet ↗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.