Animation : décroissance radioactive
Les données de la simulation peuvent être exportées au format CSV pour utilisation dans Excel, LibreOffice, LatisPro, Regressi etc...
...et aussi dans un programme écrit en Python
1. La simulation
Cliquez sur la vidéo pour accéder à la ressource
Choix de la constante de proportionnalité λ
Chaque noyau a la même probabilité de se désintégrer λ
Le programme compte alors le nombre de noyaux qui se sont désintégrés pendant une durée d’une seconde et affiche sur les courbes le nombre de noyaux restants et l’activité mesurée
Lorsque le nombre de noyaux restants est égal à la moitié du nombre de noyaux initiaux, t1/2 est affichée
Choix du nombre de noyaux initiaux N0
Plus ce nombre est important, plus les courbes se rapprochent des lois exponentielles décroissantes
Un nombre petit de noyaux initiaux permet de montrer le caractère aléatoire de la désintégration de chaque noyau (prendre une constante λ petite)
Deux simulations successives sont alors nettement différentes
Modèle théorique
Lorsque la simulation s’arrête ou est arrêtée, un modèle théorique est proposé.
Les différences entre la simulation et la théorie est donc visible et montre que les lois ne sont valables que si le nombre initial de noyaux est suffisamment grand.
Les désintégrations sont comptées et affichées sur une durée d’une seconde mais l’animation n’est pas en temps réel
2. Réutilisation des données dans un programme Python
A l’aide de la simulation ci-dessus, nous avons exporté les données pour N0=1600 et λ=0,03 dans un fichier appelé radioactivite.csv.
Ce fichier est placé dans le même répertoire que le programme Python ci-dessous.
Ce programme utilise ces données pour tracer la courbe et la modéliser.
-
import matplotlib.pyplot as plt
-
import numpy as np
-
from scipy.optimize import curve_fit
-
-
#modélisation par une fonction exponentielle décroissante
-
def modele(t, a, b) :
-
""" Modèle d’une fonction exponentielle décroissante """
-
return a * np.exp(-b*t)
-
-
-
#fonction de tracé d’une courbe avec sa modélisation
-
def trace(nom,abscisse,ordonnee,couleur) :
-
’’’
-
Fonction traçant une courbe et sa modélisation
-
paramètres :
-
nom :chaine de caractères du type X=f(t)
-
abscisse : tableau numpy contenant les abscisses
-
ordonnée : tableau numpy contenant les ordonnées
-
’’’
-
# tracé de la courbe expérimentale
-
plt.plot( abscisse,ordonnee, color = couleur, label = "Mesures : "+nom, marker = ’+’)
-
# calcul du modèle
-
parametres, covariance = curve_fit(modele, abscisse,ordonnee)
-
print(parametres)
-
# calcul des ordonnées du modèle avec la fonction du modèle et les paramètres optimisés
-
modelisation = modele(t, *parametres) # *parametres -> unpacking des paramètres du modèle
-
#chaine de caractères représentant l’équation modélisée
-
N0 , lamb = parametres
-
expression="Modèle : "+nom[0]+"="+str(int(N0))+".exp(-"+str(round(lamb,3))+".t)"
-
#tracé du modèle
-
plt.plot(t, modelisation, label=expression, color=’black’)
-
-
-
# Lecture des donnees du fichier csv
-
t,N,A = np.loadtxt(’radioactivite.csv’, unpack=True, usecols=(0, 1,2), delimiter = ’ ;’, skiprows = 1)
-
-
#affichage des données chargées à partir du fichier
-
print(t)
-
print(N)
-
print(A)
-
-
# Creation des graphiques
-
-
plt.figure(’Décroissance radioactive’,figsize=(16,7),dpi=80)
-
-
# Création du graphique N avec sa modélisation
-
plt.subplot(2,1,1)
-
plt.axis([1,t[-1],0,N[0]])
-
plt.xlabel(’Temps t(s)’)
-
plt.ylabel(’Nombre de noyaux N’)
-
trace("N=f(t)",t,N,"red")
-
plt.legend()
-
-
-
# Creation du graphique A
-
plt.subplot(2,1,2)
-
plt.axis([1,t[-1],0,A[0]])
-
plt.xlabel(’Temps t(s)’)
-
plt.ylabel(’Activité’)
-
trace("A=f(t)",t,A,"blue")
-
plt.legend()
-
-
#affichage
-
plt.show()
On retrouve bien les modèles attendus.
Remarque : les lignes 27 à 29 cassent l’universalité de la fonction trace. Sans ces lignes, cette fonction permet de tracer les données expérimentales et un modèle proposé de votre choix : il suffit pour cela de modifier la fonction modele.
Article proposé par : Jean-Luc Leloire