Diagramme de distribution


Cas d'un couple acide-base


Expressions des fractions molaires

L'équation de réaction associée à la définition de la constante d'acidité $\mathsf{K_a}$ d'un couple acide-base $\mathsf{AH(aq)/A^-(aq)}$ s'écrit : \begin{equation}\mathsf{ AH(aq)+H_2O(l)=A^-(aq) + H_3O^+(aq) } \end{equation}

A l'équilibre chimique, les concentrations de l'acide $\mathsf{AH}$ et de sa base conjuguée $\mathsf{A^-}$ sont liées par la relation de Guldberg-Waage \begin{equation}\mathsf{ K_a=\frac{[A^-]_{eq} \cdot [H_3O^+]_{eq}}{[AH]_{eq} \cdot C°} } \end{equation}

En notant $\mathsf{C_{tot}}$ la somme des concentrations $\mathsf{[A^-]_{eq}}$ et $\mathsf{[AH]_{eq}}$, les fractions molaires de l'acide et de la base s'écrivent : \begin{equation}\mathsf{ x_{AH}=\frac{[AH]_{eq}}{C_{tot}}=\frac{1}{1+10^{pH-pK_a}} \\ x_{A^-}=\frac{[A^-]_{eq}}{C_{tot}}=1-x_{AH}=\frac{10^{pH-pK_a}}{1+10^{pH-pK_a}} } \end{equation}

Il est ainsi possible de faire calculer, pour chaque valeur de pH, la proportion de l'espèce acide et celle de l'espèce basique.

Bibliothèque utilisée

La commande linspace de la bibliothèque numpy permet de générer une liste d'abscisses. La bibliothèque matplotlib permet ici de tracer les courbes.

Manipulation du script

Il est possible de modifier la valeur du $\mathsf{pK_a}$ du couple acide-base pour envisager divers couples.

In [ ]:
#%%# Diagramme de distribution d'un couple AH/A-

#Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt

#Saisie de la constante d'acidité du couple étudié
pKa=4.8

#Définition de la fonction renvoyant la proportion d'acide
# La proportion fAH de la base sera déduite (fA=1-fAH) au moment du tracé
def fAH(x):      
    return 1/(1+10**(x-pKa))

#Création d'une liste de valeurs de pH
pH = np.linspace(0,14,100)

#Tracé du diagramme
plt.plot(pH,fAH(pH),'b--',label='acide')
plt.plot(pH,1-fAH(pH),'k--',label='base')
plt.grid(True)
plt.title(f"Diagramme de distribution d'un couple de $pK_a$ = {pKa}")
plt.xlabel('pH')
plt.ylabel("proportions") 
plt.legend()
plt.show()

Cas d'un acide aminé sans groupe acide ou basique sur la chaîne latérale


Expressions des fractions molaires

Le script est écrit en considérant l'exemple de la glycine de formule $\mathsf{H_2N-CH_2-COOH}$. Le groupe acide carboxylique appartient à un couple de $\mathsf{pK_{a1}=2,4}$, le groupe amine à un couple de $\mathsf{pK_{a1}=9,6}$.

Les espèces sont symbolisées par $\mathsf{AH_2^+}$, $\mathsf{AH}$ et $\mathsf{A^-}$ où $\mathsf{AH}$ est la forme zwitterionique.

En notant $\mathsf{C_{tot}}$ la somme des concentrations $\mathsf{[AH_2^+]_{eq}}$, $\mathsf{[AH]_{eq}}$ et $\mathsf{[A^-]_{eq}}$, les fractions molaires des trois espèces s'écrivent : \begin{equation}\mathsf{ x_{AH_2^+}=\frac{[AH_2^+]_{eq}}{C_{tot}}=\frac{1}{1+10^{pH-pK_{a1}}+10^{2pH-pK_{a1}-pK_{a2}}} \\ x_{AH}=\frac{[AH]_{eq}}{C_{tot}}=\frac{1}{10^{pK_{a1}-pH}+1+10^{pH-pK_{a2}}} \\ x_{A^-}=\frac{[A^-]_{eq}}{C_{tot}}=1-x_{AH_2^+}-x_{AH} } \end{equation}

Il est ainsi possible de faire calculer, pour chaque valeur de pH, la proportion des trois espèces dans le milieu.

Manipulation du script

Il est possible de modifier les valeurs des $\mathsf{pK_a}$ des couples acide carboxylique/carboxylate et ammonium/amine pour étudier d'autres acides aminés.

In [ ]:
#%%# Diagramme de distribution d'un acide aminé simple

#Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt

#Saisie des constantes d'acidité des couples de l'AA
pKa1=2.4        #pKa du couple RCOOH/RCOO-
pKa2=9.6        #pKa du couple RNH3+/RNH2

#Définition des fonctions renvoyant les proportions des espèces
def fAH2(x):
    return 1/(1+10**(x-pKa1)+10**(2*x-pKa1-pKa2))

def fAH(x):
    return 1/(1+10**(pKa1-x)+10**(x-pKa2))

#Création d'une liste de valeurs de pH
pH = np.linspace(0,14,100)

#Tracé du diagramme de distribution
plt.plot(pH,fAH2(pH),'b--',label='$AH_2^+$')
plt.plot(pH,fAH(pH),'g--',label='$AH$')
plt.plot(pH,1-fAH2(pH)-fAH(pH),'k--',label='$A^-$')
plt.title(f"Diagramme de distribution d'un acide aminé : $pK_a1$ = {pKa1} et $pK_a2$ = {pKa2}")
plt.grid(True)
plt.xlabel('pH')
plt.ylabel("proportions") 
plt.legend()
plt.show()