Taux d'avancement final d'une transformation chimique

Programme de classe terminale, enseignement de spécialité, voie générale

Déterminer, à l’aide d’un langage de programmation, le taux d’avancement final d’une transformation, modélisée par la réaction d’un acide sur l’eau.

Principe

La réaction d'un acide sur l'eau est décrite par la réaction suivante :

\[\rm AH_{(aq)} + H_2O_{(l)} = A^-_{(aq)} + H_3O^+_{(aq)}\]

Le quotient de réaction s'écrit :

\[Q_r = \dfrac{[{\rm A^-}]\cdot[{\rm H_3O^+}]}{[{\rm AH}]\cdot C_0}\]

avec

\[[{\rm A^-}] = [{\rm H_3O^+}] = \dfrac{x}{V} \hspace{2cm} [{\rm AH}] = \dfrac{n-x}{V} \hspace{2cm} C_0 = 1~{\rm mol \cdot L^{-1}}\]

De plus, la constante d'acidité du couple \(\rm AH/A^-\) en fonction de \(pK_a\) s'écrit :

\[K_a = 10^{-pK_a}\]

Lors de l'évolution du système chimique, le quotient de réaction \(Q_r\) va tendre vers la constante d'acidité \(K_a\).

L'avancement final \(x_f\) peut se déterminer par :

  • une résolution numérique d'une équation du second degré obtenue pour \(Q_{r,f} = K_a\).

  • une évolution itérative (pas à pas) du système chimique tant que \(Q_{r,f} \leq K_a\).

Le taux d'avancement final s'obtient par l'expression :

\[\boxed{\tau = \dfrac{x_f}{_{max}}}\]

Exemple 1 : évolution pas à pas du système chimique

Le quotient de réaction

\[Q_r = \dfrac{[{\rm A^-}]\cdot[{\rm H_3O^+}]}{[{\rm AH}]\cdot C_0}\]

tend vers la constante d'acidité \(K_a\) lors de l'évolution du système chimique.

Dans le programme ci-dessous, la boucle while est interrompue à l'équilibre chimique donc pour l'avancement \(x = x_f\).

# DONNEES
pKa = 4.76  # 4.76    Pour l'acide éthanoïque
n = 0.10    # (mol)   Quantité de matière d'acide versé
V = 2.00    # (L)     Volume d'eau
C0 = 1      # (mol/l) Concentration standard

# CALCULS
Ka = 10**(-pKa) # Constante d'acidité
x = 0           # Initialisation avancement
dx = 0.00001    # Pas d'avancement
Qr = 0          # Quotient de réaction initial

while Qr<=Ka:
   x = x + dx               # Incrémentation avancement de dx
   C_AH = (n-x)/V           # Décrémentation de la concentration AH
   C_A = x/V                # Incrémentation de la concentration A-
   C_H30 = x/V              # Incrémentation de la concentration H3O+
   Qr = C_A*C_H30/(C_AH*C0) # Calcul du nouveau quotient de réaction

x_f = x             # xf
x_max = n           # xmax
tau = 100*x_f/x_max # tau d'avancement final

# RESULTATS
print("x_f =", x_f)
print("tau =", tau)
print("Pour ", n, "mol d'acide ( Pka =", pKa, ") versé dans", V, "L d'eau")
print("Le taux d'avancement final est de", round(tau,2), "%")
Résultats

>>> %Run script.py
x_f = 0.0018500000000000042
tau = 1.850000000000004
Pour  0.1 mol d'acide ( Pka = 4.76 ) versé dans 2.0 L d'eau
Le taux d'avancement final est de 1.85 %

Exemple 2 : résolution numérique

A l'état final :

\[K_a = \dfrac{[{\rm A^-}]_{eq}\cdot[{\rm H_3O^+}]_{eq}}{[{\rm AH}]_{eq}\cdot C_0} = \dfrac{\dfrac{x_f^2}{V^2}}{\dfrac{n-x_f}{V}\cdot C_0} = \dfrac{x_f^2}{(n-x_f)\cdot V \cdot C_0}\]

On obtient le polynôme du second degré suivant :

\[\boxed{x_f^2 + K_a V C_0~x_f - K_a n VC_0 = 0} \hspace{1cm}\text{avec}\hspace{1cm} C_0 = 1~{\rm mol\cdot L^{-1}}\]

dont la résolution donne \(x_f\) connaissant \(n\), \(V\) et \(K_a = 10^{-pK_a}\).

Le programme Python ci-dessous fait appel à la classe poly1d de la librairie numpy pour déterminer les racines du polynôme du seconde degré.

import numpy as np

def avancement_final(pKa, n, V, C0 = 1):
   """ Retourne l'avancement final de la réaction
   d'un acide sur l'eau.
   """
   Ka = 10**(-pKa)                  # Calcul de Ka
   a, b, c = 1, Ka*V*C0, -Ka*n*V*C0 # Coeff. du polynome
   polynome = np.poly1d([a,b,c])    # Création du polynome
   solutions = polynome.roots       # Solutions
   return solutions[1]              # Retourne la deuxième solution

# DONNEES
pKa = 4.76  # 4.76  Pour l'acide éthanoïque
n = 0.10    # (mol) Quantité de matiere d'acide versé
V = 2.00    # (L)   Volume d'eau

# CALCULS
x_max = n                         # (mol) Avancement maximal
x_f = avancement_final(pKa, n, V) # (mol) Avancement final
tau = 100*x_f/x_max               # (%)   Tau d'avancement final

# Affichage
print("x_f =", x_f)
print("tau =", tau)
print("Pour ", n, "mol d'acide ( Pka =", pKa, ") versé dans", V, "L d'eau")
print("Le taux avancement final est de", round(tau,2), "%")
Résultats

>>> %Run script.py
x_f = 0.0018469995427119795
tau = 1.8469995427119794
Pour  0.1 mol d'acide ( Pka = 4.76 ) versé dans 2.0 L d'eau
Le taux avancement final est de 1.85 %