Évolution d'un système chimique
Programme de première générale - Enseignement de spécialité - 2019
"Déterminer la composition de l’état final d’un système siège d’une transformation chimique totale à l’aide d’un langage de programmation.
Exemple 1 : quantités de matière à l'état final
On considère la réaction totale entre l’hydrogène sulfureux (H2S) et le dioxyde de soufre (SO2 ) qui produit du soufre et de l’eau et modélisée par l’équation :
\[2 H_2S + SO_2 -> 3 S + 2 H_2O\]
a, b, c, d = 2, 1, 3, 2 # coefficient stoechiométrique de H2S
n_H2S, n_SO2, n_S, n_H2O = 1, 1, 0, 0 # Quantités de matière initiales
x = 0 # Initialisation de l'avancement
dx = 0.01 # Pas de l'avancement
while (n_H2S>0) and (n_SO2>0) :
x = x + dx # Incrémentation de l'avancement avec le pas
n_H2S = n_H2S - a*dx # Décrémentation des quantités de matière des réactifs
n_SO2 = n_SO2 - b*dx # ---
n_S = n_S + c*dx # Incrémentation des quantités de matière des réactifs
n_H2O = n_H2O + d*dx # ---
print('Avancement final = ',round(x,2), ' mol')
print('n(H2S) = ', round(n_H2S,2))
print('n(SO2) = ', round(n_SO2,2))
print('n(S) = ', round(n_S,2))
print('n(H2O) = ', round(n_H2O,2))
- Résultats
Avancement final = 0.5 mol
n(H2S) = -0.0
n(SO2) = 0.5
n(S) = 1.5
n(H2O) = 1.0
- Questionnement
Sous quelle(s) condition(s) la boucle
while
s'arrête-t-elle ?Quelle est l'influence de la grandeur
dx
?Modifier les quantités de matière initiales pour obtenir un mélange stœchiométrique. Vérifier.
Exemple 2 : évolution des quantités de matière
Toujours pour la même réaction.
Pour un affichage sous forme de courbes, il faut mémoriser les quantités de matière dans des tableaux (liste).
import matplotlib.pyplot as plt
a, b, c, d = 2, 1, 3, 2 # coefficient stoechiométrique de H2S
n_H2S, n_SO2, n_S, n_H2O = 1, 1, 0, 0 # Quantités de matière initiales
n_H2S, n_SO2, n_S, n_H2O = [n0_H2S], [n0_SO2], [n0_S], [n0_H2O] # Initialisation des tableaux
x = [0]
dx = 0.01
while (n_H2S[-1]>0) and (n_SO2[-1]>0) :
x.append(x[-1] + dx)
n_H2S.append(n_H2S[-1] - a*dx)
n_SO2.append(n_SO2[-1] - b*dx)
n_S.append(n_S[-1] + c*dx)
n_H2O.append(n_H2O[-1] + d*dx)
xMax = x[-1]
plt.plot(x,n_H2S,label = "Réactif H2S")
plt.plot(x,n_SO2,label = "Réactif SO2")
plt.plot(x,n_S,label = "Produit S")
plt.plot(x,n_H2O,label = "Produit H2O")
plt.title("Evolution d'une réaction chimique")
plt.xlabel("Avancement x (mol)")
plt.xlim(0,xMax)
plt.ylabel("Quantité de matière (mol)")
plt.ylim(0,2)
plt.legend()
plt.grid()
plt.show()
- résultats
