Titrage - Evolution des quantités de matière

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

Représenter, à l’aide d’un langage de programmation, l’évolution des quantités de matière des espèces en fonction du volume de solution titrante versé.

Dosage par titrage par suivi conductimétrie

Titrage par conductimétrie de l'acide ascorbique (\(\rm C_6H_8O_6\)) par une solution d'hydroxyde de sodium / soude (\(\rm Na^+ + OH^-\)).

Méthode 1 : tableaux Numpy sans conditionnelle if

Évolution de quantités de matière des espèces en fonction du volume de solution titrante versé connaissant \(V_E\) et donc \(C_A\).

"""
Titrage par conductimétrie de l'acide ascorbique (C6H8O6)
par une solution d'hydroxyde de sodium / soude (Na+ HO-)
"""
import numpy as np
import matplotlib.pyplot as plt

# VARIABLES
VA = 40.0     # (mL)    Volume de solution titrée
CB = 0.010    # (mol/L) Concentration de soude

VE = 8.2      # (mL)    Volume de soude versé à l'équivalence
CA = CB*VE/VA # (mol/L) Concentration initiale d'acide ascorbique

# AVANT EQUIVALENCE
VB1 = np.linspace(0, VE, 20)  # Valeurs de VB avant équivalence
nAH_1 = CA*VA*1E-3 - CB*VB1*1E-3
nNa_1 = CB*VB1*1E-3
nOH_1 = 0*VB1
nA_1 = CB*VB1*1E-3

# APRES EQUIVALENCE
VB2 = np.linspace(VE, 20, 20)  # Valeurs de VB avant équivalence
nAH_2 = 0*VB2
nNa_2 = CB*VB2*1E-3
nOH_2 = CB*(VB2-VE)*1E-3
nA_2 = 0*VB2 + CB*VE*1E-3

# COURBES
plt.plot(VB1, nAH_1, "c+-", label=r"$AH$")
plt.plot(VB2, nAH_2, "c+-")

plt.plot(VB1, nNa_1, "b+-", label=r"$Na^+$")
plt.plot(VB2, nNa_2, "b+-")

plt.plot(VB1, nOH_1, "g+-", label=r"$OH^-$")
plt.plot(VB2, nOH_2, "g+-")

plt.plot(VB1, nA_1, "r+-", label=r"$A^-$" )
plt.plot(VB2, nA_2, "r+-")

plt.axvline(VE, color="gray", linestyle ="dashed")

plt.xlabel("Volume de solution titrante (mL)")
plt.ylabel("Quantité de matière (mol)")
plt.legend()
plt.grid()
plt.show()
Résultats

alternate text

Méthode 2 : listes avec conditionnelle if

Évolution de quantités de matière des espèces en fonction du volume de solution titrante versé connaissant \(V_E\) et donc \(C_A\).

"""
Titrage par conductimétrie de l'acide ascorbique (C6H8O6)
par une solution d'hydroxyde de sodium / soude (Na+ HO-)
"""
import numpy as np
import matplotlib.pyplot as plt

# VARIABLES
VA = 40.0     # (mL)    Volume de solution titrée
CB = 0.010    # (mol/L) Concentration de soude

VE = 8.2      # (mL)    Volume de soude versé à l'équivalence
CA = CB*VE/VA # (mol/L) Concentration initiale d'acide ascorbique

VB = []
nAH = []
nNa = []
nOH = []
nA = []

Vmax = 20
N = 40

for i in range(0, N):
   VB.append(Vmax*i/N)
   if VB[i]<VE:
      nAH.append(CA*VA*1E-3 - CB*VB[i]*1E-3)
      nNa.append(CB*VB[i]*1E-3)
      nOH.append(0)
      nA.append(CB*VB[i]*1E-3)
   else:
      nAH.append(0)
      nNa.append(CB*VB[i]*1E-3)
      nOH.append(CB*(VB[i]-VE)*1E-3)
      nA.append(CB*VE*1E-3)


# COURBES
plt.plot(VB, nAH, "r+-", label=r"$AH$")
plt.plot(VB, nA, "c+-", label=r"$A^-$" )
plt.plot(VB, nNa, "b+-", label=r"$Na^+$")
plt.plot(VB, nOH, "g+-", label=r"$OH^-$")

plt.axvline(VE, color="gray", linestyle ="dashed")

plt.xlabel("Volume de solution titrante (mL)")
plt.ylabel("Quantité de matière (mol)")
plt.legend()
plt.grid()
plt.show()
Résultats

alternate text

Méthode 3 : pas à pas

Évolution de quantités de matière des espèces en fonction du volume de solution titrante versé connaissant \(C_A\).

Détermination de \(V_E\).

"""
Titrage par conductimétrie de l'acide ascorbique (C6H8O6)
par une solution d'hydroxyde de sodium ou soude (Na+ HO-)
Détermination de Ve connaissant CA
"""
import numpy as np
import matplotlib.pyplot as plt

# VARIABLES
CA = 0.0025
VA = 40.0     # (mL)    Volume de solution titrée
CB = 0.010    # (mol/L) Concentration de soude

VB = [0]
nAH = [CA*VA*1E-3]
nNa_plus = [0]
nOH_moins = [0]
nA_moins = [0]

VB_pas = 0.1 # mL

while VB[-1]<20:
   if nAH[-1]>0:
      nAH.append(nAH[-1] - CB*VB_pas*1E-3)           # Consommation AH
      nNa_plus.append(nNa_plus[-1] + CB*VB_pas*1E-3) # Apport de Na+
      nOH_moins.append(0)                            # OH- est totalement consommé
      nA_moins.append(nA_moins[-1] + CB*VB_pas*1E-3) #
      VE = VB[-1]
   else:
      nAH.append(nAH[-1])
      nNa_plus.append(nNa_plus[-1] + CB*VB_pas*1E-3)
      nOH_moins.append(nOH_moins[-1] + CB*VB_pas*1E-3)
      nA_moins.append(nA_moins[-1])
   VB.append(VB[-1]+VB_pas)

print("VE = ", VE, "mL")

# COURBES
plt.plot(VB, nAH, "r-", label="AH")
plt.plot(VB, nA_moins, "c-", label=r"$A^-$" )
plt.plot(VB, nOH_moins, "b-", label=r"$OH^-$")
plt.plot(VB, nNa_plus, "g-", label=r"$Na^+$")

plt.axvline(VE, color="gray", linestyle ="dashed")

plt.title("Avec un pas de " + str(VB_pas) + " mL")
plt.xlabel("Volume de solution titrante (mL)")
plt.ylabel("Quantité de matière (mol)")
plt.legend()
plt.grid()
plt.show()
Résultats

alternate text alternate text