Activité
Simuler la décroissance radioactive
Consigne
Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.
Le chapitre 19 simulait une équation différentielle par la méthode d’Euler : un algorithme déterministe. La radioactivité appelle l’angle opposé — simuler le hasard lui-même, et regarder la loi émerger. C’est l’expérience des dés du §6.1, en plus grand.
Le principe suit la définition de : pendant le pas très court de , et parce que est petit, chaque noyau encore présent se désintègre avec une probabilité approximativement égale à . La fonction random() du module random renvoie un nombre au hasard entre 0 et 1 : l’événement « random() <= proba » se produit donc avec la probabilité proba — c’est notre noyau qui se désintègre.
Le script Ch20_simulation.py (dossier scripts/) parcourt, seconde après seconde, les noyaux restants — listes et boucles, sans aucune bibliothèque de calcul. Il s’exécute tel quel, à une ligne près (# À COMPLÉTER).
(La suite — tracé de la simulation et superposition de la loi — est fournie et n’est pas à modifier.) Le résultat est la courbe déjà rencontrée au §6.4 : le nuage stochastique épouse la loi de décroissance.
Questions :
- Compléter la valeur de
probaà partir de la définition de et de l’approximation expliquée ci-dessus. - Exécuter deux fois le script : les courbes obtenues sont-elles identiques ? Recommencer avec
N0 = 20: que change-t-on, et que retrouve-t-on du §6.1 ? - Relever sur la courbe la date à laquelle il reste 1 000 noyaux (la moitié), et comparer à .
O5 - Python (listes, boucles, append) : tout y est rappelé.
Script élève
# -*- coding: utf-8 -*-
"""Chapitre 20 — Simulation stochastique de la décroissance radioactive.
À chaque pas de 1 s, chaque noyau restant se désintègre avec une
probabilité approximativement égale à lam, car lam est très petit.
Le script superpose la simulation à la loi N = N0 exp(-lam * t).
"""
import math
import random
import matplotlib.pyplot as plt
lam = 0.01 # constante radioactive (s^-1)
N0 = 2000 # noyaux présents à t = 0
proba = 0.005 # À COMPLÉTER : probabilité de désintégration pendant 1 s
ts = [0] # dates (pas de 1 s)
Ns = [N0] # nombres de noyaux restants
while Ns[len(Ns) - 1] > N0 / 100:
n_desintegrations = 0
for i in range(Ns[len(Ns) - 1]):
if random.random() <= proba:
n_desintegrations = n_desintegrations + 1
Ns.append(Ns[len(Ns) - 1] - n_desintegrations)
ts.append(ts[len(ts) - 1] + 1)
# ---- Tracé fourni, à ne pas modifier ---------------------------------
N_exact = []
for t in ts:
N_exact.append(N0 * math.exp(-lam * t))
plt.plot(ts, Ns, ".", markersize=3, label="simulation (hasard)")
plt.plot(ts, N_exact, "-", label="loi du cours : $N_0\\,e^{-\\lambda t}$")
plt.xlabel("t (s)")
plt.ylabel("N (noyaux restants)")
plt.legend()
plt.grid(True, alpha=0.3)
plt.title("Décroissance radioactive : le hasard redonne la loi")
plt.show()