Solution proposée
import numpy as np
import matplotlib.pyplot as plt
# Mesures de Taylor : rayon r de la boule de feu (en m) à l'instant t (en ms)
t = np.array([0.1, 0.2, 0.4, 0.5, 0.7, 0.8, 0.9, 1.1, 1.2, 1.4, 1.5, 1.7, 1.8,
1.9, 3.3, 3.5, 3.8, 4.1, 4.3, 4.6, 15, 25, 34, 53, 62])
r = np.array([11.1, 19.9, 25.4, 28.8, 31.9, 34.2, 36.3, 38.9, 41.0, 42.8, 44.4, 46.0, 46.9,
48.7, 59.0, 61.1, 62.9, 64.3, 65.6, 67.3, 106.5, 130, 145, 175, 185])
rho = 1.2 # masse volumique de l'air, en kg/m^3
# E = rho * r^5 / t^2 se réécrit r^5 = (E/rho) * t^2 : droite passant par l'origine.
x = t**2
y = r**5
# ---------- Ne pas modifier ce qui suit ----------
if len(t) != len(r):
print(f"Les tailles de vos listes sont différentes : {len(t)} temps "
f"et {len(r)} rayons. Vérifiez le tableau.")
else:
a = np.sum(x*y)/np.sum(x**2) # ajustement linéaire passant par l'origine
E = rho*a*1e6 # t étant en ms, la pente est en m^5/ms^2
plt.plot(x, y, '+', label="mesures")
plt.plot(x, a*x, label=f"ajustement : E = {E:.2e} J")
plt.xlabel("$t^2$ (ms$^2$)")
plt.ylabel("$r^5$ (m$^5$)")
plt.legend()
plt.grid(alpha=0.3)
plt.show()
print(f"E = {E:.2e} J, soit {E/4.18e12:.0f} kilotonnes de TNT")