Chapitre 16

Activités Python

Énergie mécanique et travail

Activité

Établir un bilan énergétique

Consigne

Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.

Le script Ch16_bilan_basket.py (dossier scripts/) relit à l’énergie le pointage réel du chapitre 13 : le même ballon et la même table de mesures sont étudiés par un bilan énergétique. Il calcule EcE_c, EppE_{pp} et EmE_m au fil du vol (m=0,62m = 0{,}62 kg). Un point de méthode, dit en une ligne : vi\vec v_i, construit « vers le point suivant », est la vitesse entre MiM_i et Mi+1M_{i+1} — on la compare donc à l’altitude du milieu (zi+zi+1)/2(z_i + z_{i+1})/2, pas à ziz_i.

(La suite — moyenne, écart maximal et tracé des trois courbes — est fournie et n’est pas à modifier.)

Type : graphique Titre : Bilan énergétique du lancer réel (pointage du basket, ch. 13) Rôle : tester expérimentalement la conservation de EmE_m sur un pointage réel.

  • Axe horizontal : temps tt en s, de 00 à environ 1,01{,}0 s (commun aux deux panneaux).
  • Axe vertical : énergie en J — panneau du bas de 00 à 3333 J ; panneau du haut = agrandissement sur EmE_m autour de 29,8529{,}85 J.
  • Courbes : EcE_c (rouge) décroissante puis croissante, EppE_{pp} (bleu) croissante puis décroissante, Em=Ec+EppE_m = E_c + E_{pp} (vert, points) ~ constante ; tiretés = droite moyenne Em=29,85E_m = 29{,}85 J.
  • Résultat lisible : EcE_c et EppE_{pp} s’échangent (EcE_c minimal / EppE_{pp} maximal au sommet, vers t0,6t \approx 0{,}6 s) ; EmE_m reste sur la droite moyenne, écart ±0,2\pm 0{,}2 % au plus, sans tendance.

Questions :

  1. Compléter les deux lignes (EcE_c à partir de vxv_x et vzv_z ; EppE_{pp} avec l’altitude du milieu).
  2. Exécuter : que valent la moyenne de EmE_m et l’écart maximal ? Les fluctuations ont-elles une tendance ?
  3. Décrire les courbes Ec(t)E_c(t) et Epp(t)E_{pp}(t) : que font-elles au sommet du vol ? Que vaut leur somme ?
  4. Remplacer zmil par z[i] et ré-exécuter : EmE_m monte régulièrement de 29,129{,}1 à 30,330{,}3 J. L’énergie n’est pourtant pas apparue de nulle part — expliquer l’artefact.

O5 - Python et O4 - Incertitudes : les outils nécessaires y sont rappelés.

Script élève

# -*- coding: utf-8 -*-
# Chapitre 16 — Bilan énergétique du lancer de basket
# Le pointage réel du chapitre 13, relu à l'énergie : on calcule Ec,
# Epp et Em au fil du vol. Attention : v_i est la vitesse ENTRE M_i et
# M_i+1 — on la compare donc à l'altitude du MILIEU.

import matplotlib.pyplot as plt

m = 0.62       # masse du ballon (kg)
g = 9.81
dt = 0.04
t = []
for i in range(26):
    t.append(dt * i)
x = [0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4,
     2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0]
z = [1.800, 2.032, 2.249, 2.449, 2.635, 2.804, 2.958, 3.096, 3.218,
     3.325, 3.416, 3.491, 3.551, 3.595, 3.623, 3.636, 3.633, 3.614,
     3.580, 3.530, 3.464, 3.383, 3.285, 3.173, 3.044, 2.900]

tm = []
Ec = []
Epp = []
Em = []
for i in range(len(t) - 1):
    vx = (x[i+1] - x[i]) / dt
    vz = (z[i+1] - z[i]) / dt
    zmil = (z[i] + z[i+1]) / 2          # altitude du MILIEU de l'intervalle
    Ec.append(0)                           # énergie cinétique  # À COMPLÉTER
    Epp.append(0)                          # énergie potentielle  # À COMPLÉTER
    Em.append(Ec[i] + Epp[i])
    tm.append(t[i] + dt / 2)

somme_Em = 0.0
for energie in Em:
    somme_Em = somme_Em + energie
moy = somme_Em / len(Em)
Em_min = Em[0]
Em_max = Em[0]
ecart_max = 0.0
for energie in Em:
    if energie < Em_min:
        Em_min = energie
    if energie > Em_max:
        Em_max = energie
    ecart = energie - moy
    if ecart < 0:
        ecart = -ecart
    if ecart > ecart_max:
        ecart_max = ecart
print("Em : min =", Em_min, "J ; max =", Em_max, "J ; moyenne =", moy, "J")
print("écart max à la moyenne :", 100 * ecart_max / moy, "%")

plt.plot(tm, Ec, "o-", ms=3, label="Ec")
plt.plot(tm, Epp, "o-", ms=3, label="Epp (origine au sol)")
plt.plot(tm, Em, "o-", ms=3, label="Em = Ec + Epp")
plt.axhline(moy, color="gray", linestyle="--", lw=1)
plt.xlabel("t (s)")
plt.ylabel("énergie (J)")
plt.legend()
plt.grid(True)
plt.title("Le bilan énergétique du lancer (pointage réel)")
plt.show()

← Retour au portail du chapitre