Une quantité infime de chorure de fer(III) est additionnée à $\mathsf{100 mL}$ d'une solution de péroxyde d'hydrogène $\mathsf{H_2O_2}$ à la concentration $\mathsf{C_0=0,10 \text{ } mol \cdot L^{-1}}$. Le milieu est agité.
Un dégagement gazeux est observé attribuable à la formation de dioxygène par dismutation du péroxyde d'hydrogène. L'équation de la réaction modélisant cette transformation est : \begin{equation}\mathsf{ \\ H_2O_2(aq)=H_2O(l)+\frac{1}{2} O_2(g) \\} \end{equation}
L'objectif est de tester une hypothèse d'un ordre partiel 1 par rapport au péroxyde d'hydrogène. Pour valider cette hypothèse, le tracé de la courbe $\mathsf{ln \left([H_2O_2]\right)=f(t)}$ doit être une droite décroissante.
A cet effet, un volume $\mathsf{V=10mL}$ de la solution est prélevé à différents instants, en vue de déterminer, par titrage, la concentration du péroxyde d'hydrogène restant.
La réaction support du titrage du péroxyde d'hydrogène par une solution de permanganate de potassium peut s'écrire : \begin{equation} \mathsf{ \\ 2 MnO_4^-(aq)+5H_2O_2(aq)+6H^+(aq)=2Mn^{2+}(aq)+5O_2(g)+8H_2O(l) \\ } \end{equation}
L'équivalence du titrage est repérée par la persistance d'une coloration violette due à l'introduction excédentaire des ions permanganate. En notant $\mathsf{V_{sol}}$, le volume de solution prélevé, $\mathsf{V_{eq}}$, le volume de solution titrante versé à l'équivalence et $\mathsf{[MnO_4^-] = 2,0\cdot 10^{-2} mol \cdot L^{-1}}$, la concentration de la solution titrante, la relation permettant de calculer la concentration du péroxyde d'hydrogène restant s'écrit : \begin{equation} \mathsf{ \\ [H_2O_2]=\frac{2}{5}\frac{[MnO_4^-] \cdot V_{eq}}{V_{sol}} \\ } \end{equation}
Les volumes équivalents mesurées à différentes dates sont rassemblés dans le tableau suivant : \begin{array}{c|c|c} t (s) & 280 & 700 & 880 & 1120 & 1350 & 1800 \\ \hline V_{eq} (mL) & 13,8 & 8,5 & 7,1 & 5,8 & 4,4 & 2,7 \\ \end{array}
La bibliothèque numpy
est utilisée pour réaliser des calculs et modéliser un nuage de points par un polynôme de degré 1.
La bibliothèque matplolib
permet de tracer des graphiques.
# Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt
#Saisie des valeurs expérimentales
t = [280 , 700 , 880 , 1120 , 1350 , 1800]
Veq = [13.8 , 8.5 , 7.1 , 5.8 , 4.4 , 2.7]
#Calcul des ordonnées et abscisses
Y = [np.log(2/5*.02/10*i) for i in Veq] #ln([H2O2])
X = t
#Modélisation
p = np.polyfit(X,Y,1)
Residus = [Y[i] - np.polyval(p,X[i]) for i in range(0,len(X))]
#Tracé de ln([H2O2]) en fonction du temps + modèle
plt.figure(1)
plt.plot(X,Y,'o')
plt.plot(X,np.polyval(p,X),'--')
plt.title("ln([H2O2]) en fonction du temps + modèle")
plt.xlabel("t en s")
plt.ylabel("ln[H2O2]")
plt.grid()
plt.show()
#Tracé des résidus
plt.figure(2)
plt.plot(X,Residus,'o')
plt.title("résidus")
plt.xlabel("t en s")
plt.ylabel("résidus")
plt.axhline(linewidth=3)
plt.grid()
plt.show()
print(f"Coefficient directeur : {p[0]} s^{-1}")
print(f"Ordonnée à l'origine : {p[1]}")
Volumes :
Concentration de la solution titrante :
La concentration de la solution titrante est réputée précise à 1% près.
Evaluation de l'incertitude-type sur l'ordonnée $\mathsf{ln[H_2O_2])}$ par la méthode de Monte-Carlo :
L'ordonnée du graphique est $\mathsf{ln[H_2O_2])}$. Celle-ci est calculée à partir des données expérimentales qui apparaissent dans la relation ci-dessous : \begin{equation} \mathsf{ \\ ln([H_2O_2])=ln \left( \frac{2}{5}\frac{[MnO_4^-] \cdot V_{eq}}{V_{sol}} \right) \\ } \end{equation}
La méthode de Monte-Carlo consiste à évaluer l'incertitude-type sur Y en déterminant l'écart-type d'un ensemble de valeurs de Y calculées à partir de $N$ jeux de variables ($\mathsf{[MnO_4^-]}$, $\mathsf{V_{eq}}$ et $\mathsf{V{sol}}$) tirées au sort.
Pour le volume équivalent, une valeur située à peu près au milieu de la gamme des valeurs mesurées a été retenue, ici $\mathsf{8 mL}$.
# Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt
#Nombre de tirages
N=10000
#Initialisation d'une liste pour accueillir les valeurs simulées de Y = ln([H2O2])
Ysim=[]
#Procédure de simulation
for i in range (N):
Vsol = np.random.uniform(9.9,10.1) #Vsol de 10 mL, demi-étendue 0.1 mL
Veq = np.random.uniform(7.95,8.05) #Veq de 8 mL, demi-étendue 0.05 mL
CMn = np.random.uniform(.0198,.0202) #CMn de 2E-4 mol/L, demi-étendue 2E-4 mol/L
Ysim.append(np.log(2/5*CMn/Vsol*Veq))
u_Y=np.std(Ysim,ddof=1)
print(f"Incertitude-type sur Y : {u_Y}")
Pour la suite, on retient une incertitude-type sur $\mathsf{Y}$ de $\mathsf{9 \times 10^{-3}}$.
L'incertitude-type sur l'ordonnée $\mathsf{Y}$ est désormais évaluée. Les barres d'erreur peuvent être ajoutées aux graphiques tracés précédemment.
# Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt
#Saisie des valeurs expérimentales
t = [280 , 700 , 880 , 1120 , 1350 , 1800]
Veq = [13.8 , 8.5 , 7.1 , 5.8 , 4.4 , 2.7]
#Calcul des ordonnées et abscisses
Y = [np.log(2/5*.02/10*i) for i in Veq] #ln([H2O2])
X = t
#Modélisation
p = np.polyfit(X,Y,1)
Residus = [Y[i] - np.polyval(p,X[i]) for i in range(0,len(X))]
#Tracé de ln([H2O2]) en fonction du temps + modèle
plt.figure(1)
plt.errorbar(X,Y,yerr=2*9E-3,fmt='o')
plt.plot(X,np.polyval(p,X),'--')
plt.title("ln([H2O2]) en fonction du temps + modèle")
plt.xlabel("t en s")
plt.ylabel("ln[H2O2]")
plt.grid()
plt.show()
#Tracé des résidus
plt.figure(2)
plt.errorbar(X,Residus,yerr=2*9E-3,fmt='go',markersize=8)
plt.title("résidus")
plt.xlabel("t en s")
plt.ylabel("résidus")
plt.axhline(linewidth=3)
plt.grid()
plt.show()
print(f"Coefficient directeur : {p[0]} s^{-1}")
print(f"Ordonnée à l'origine : {p[1]}")
Les résidus semblent aléatoires. Les barres d'erreur ne chevauchent pas toutes la droite de régression ce qui pourrait conduire à rejeter hâtivement l'hypothèse d'ordre 1. Cependant, avant de rejeter l'hypothèse, il faudrait s'assurer que :
Dans tous les cas, il semble raisonnable de répéter plusieurs l'expérience avant de conclure de manière définitive.