Validation d'une loi cinétique

Présentation de la transformation


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}

Valeurs mesurées


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}

Bibliothèques utilisées


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.

Script sans prise en compte des incertitudes de mesure


In [ ]:
# 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]}")
Coefficient directeur : -0.0010597163447411996 s^-1
Ordonnée à l'origine : -4.221964669553493

Evaluation des incertitudes par la méthode de Monte-Carlo


Volumes :

  • Les $\mathsf{10mL}$ de solution sont prélevés à l'aide d'une pipette jaugée de $\mathsf{10 mL}$. La présence de bulles de gaz laisse penser que le volume est connu à $\mathsf{\pm 0.1 mL}$ ;
  • L'équivalence est généralement repérée à 1 ou 2 gouttes près. Le volume équivalent est raisonnablement compris dans un intervalle de $\mathsf{\pm 0,05 mL}$ autour de la valeur lue.

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}$.

In [ ]:
# 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}")
Incertitude-type sur Y : 0.00881688407009777

Pour la suite, on retient une incertitude-type sur $\mathsf{Y}$ de $\mathsf{9 \times 10^{-3}}$.

Validation avec prise en compte des incertitudes de mesure


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.

In [ ]:
# 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]}")
Coefficient directeur : -0.0010597163447411996 s^-1
Ordonnée à l'origine : -4.221964669553493

Conclusion


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 :

  • les incertitudes n'ont pas été sous-évaluées,
  • les points expérimentaux plus éloignés de la droite de régression ont été convenablement acquis.

Dans tous les cas, il semble raisonnable de répéter plusieurs l'expérience avant de conclure de manière définitive.