Diagramme de distribution des espèces d'un couple acide-base
Programme de classe terminale, enseignement de spécialité, voie générale
Tracer, à l’aide d’un langage de programmation, le diagramme de distribution des espèces d’un couple acide-base de pKa donné.
Théorie
Soit un couple acide/base de la forme \({\rm AH}/{\rm A^-}\) respectant la réaction suivante à l'eau :
\[{\rm AH}_{(aq)} + {\rm H_2O}_{(l)} = A^{-}_{(aq)} + {\rm H_3O^{+}}_{(aq)}\]
La proportion d'acide à l'équilibre s'écrit :
\[p_{\rm AH} = \dfrac{[{\rm AH}]_{eq}}{[{\rm AH}]_{eq} \cdot [{\rm A^-}]_{eq}}
=\dfrac{1}{1+\dfrac{[{\rm AH}]_{eq}}{[{\rm A^-}]_{eq}}}\]
De plus :
\[pH = pK_a + \log(\dfrac{[{\rm A^-}]_{eq}}{[{\rm AH}]_{eq}})
\quad\implies\quad
\dfrac{[{\rm A^-}]_{eq}}{[{\rm AH}]_{eq}} = 10^{pH-pK_a}\]
D'où :
\[\boxed{p_{{\rm AH}} =\dfrac{1}{1+10^{pH-pK_a}}}\]
Puis la proportion de base à l'équilibre :
\[\boxed{ p_{{\rm A^-}} = 1 - p_{{\rm AH}} }
\quad\implies\quad
p_{{\rm A^-}} =\dfrac{10^{pH-pK_a}}{1+10^{pH-pK_a}}\]
Programmes Python
Exemple du couple \(\rm CH_3COOH/CH_3COO^-\) (acide éthanoïque/ion éthanoate).
import numpy as np
import matplotlib.pyplot as plt
pH = np.linspace(0, 14, 100)
pKa = 4.8 # pKa du couple acide/base
p_acide = 1/(1 + 10**(pH-pKa))
p_base = 1 - p_acide
plt.plot(pH, 100*p_acide, 'r-', label = 'Proportion acide')
plt.plot(pH, 100*p_base, 'b--', label = 'Proportion base')
plt.vlines(pKa, 10, 90) # pKa
plt.text(pKa, 10, r"$pK_a$", ha = 'center', va = 'top')
plt.title(r"Diagramme de distribution du couple $CH_3COOH/CH3C00^-$")
plt.legend()
plt.ylabel('Proportion (%)')
plt.xlabel('pH')
plt.grid()
plt.show()
- Résultat

Puis en mettant en évidence les parties où :
la forme acide est prédominante pour \(pH<pK_a-1\) ;
la forme basique est prédominante pour \(pH>pK_a+1\).
import numpy as np
import matplotlib.pyplot as plt
pH = np.linspace(0, 14, 100)
pKa = 4.8 # pKa du couple acide/base
p_acide = 1/(1 + 10**(pH-pKa))
p_base = 1 - p_acide
plt.plot(pH, 100*p_acide, 'r-', label = 'Proportion acide')
plt.plot(pH, 100*p_base, 'b--', label = 'Proportion base')
plt.vlines(pKa, 10, 90) # pKa
plt.text(pKa, 10, r"$pK_a$", ha = 'center', va = 'top')
plt.axvspan(0, pKa-1, color='r', alpha=0.1) # Zone forme acide prédominante
plt.text(pKa/2, 60, "Forme\nacide\nprédominante", color='r', ha='center')
plt.axvspan(pKa+1, 14, color='b', alpha=0.1) # Zone forme acide prédominante
plt.text((14+pKa)/2, 60, "Forme\nbasique\nprédominante", color='b', ha='center')
plt.title(r"Diagramme de distribution du couple $CH_3COOH/CH3C00^-$")
plt.legend()
plt.ylabel('Proportion (%)')
plt.xlabel('pH')
plt.grid()
plt.show()
- Résultat
