Présentation du programme
Coder en python, quel intérêt en chimie ? Avec l'étude des équilibres, programmer peut offrir de nombreuses clés pour prévoir des états finaux de système chimique.
La prévision des quantités de matière à l’état final est un enjeu important, notamment pour les synthèses pour lesquelles des enjeux économiques imposent aux industriels d’améliorer les rendements à moindre coût.
La forme générale de l'équation d'une réaction non totale, présentant un équilibre chimique avec coexistence de tous les produits et de tous les réactifs, est :
a A (aq)+b B(aq)⇄c C (aq)+d D(aq), avec une constance d'équilibre K.
1. Évolution des quantités de matière
de chaque espèce lors de la réaction
import numpy as np
import matplotlib.pyplot as plt
# La reaction consideree est a A + b B -> c C + d D
# Coefficients stoechiometriques
a, b, c, d = 1, 1, 1, 1
# Quantites de matiere initiales et volume initial
n_iA, n_iB, n_iC, n_iD = 0.1, 0.1, 0, 0
V = 100.0e-3
# Constante d'equilibre
K = 1e-1
# Calcul de l'avancement final et generation des valeurs de x entre 0 mol et xmax
xmax = min(n_iA/a, n_iB/b)
x = np.arange(xmax/10000.0, xmax, xmax/10000.0)
tau = x/xmax
# Calcul des quantites de matiere et du quotient de reaction a chaque avancement x
#n_A = # A complete
#n_B = # A complete
#n_C = # A complete
#n_D = # A complete
#Q_r = # A complete
# Determination de l'avancement final x_f
#for i in range(len(x)) :
# if () :
# x_f = x[i]
# i = i+1
# else :
# continue
plt.subplot(2,1,1)
plt.ylabel('Quantites de matiere \n de A, B, C et D (mol/L)', fontsize=8)
plt.title('Evolutions des concentrations et du quotient de reaction', fontsize=8)
plt.grid()
plt.axis(xmin=0, xmax=xmax)
#plt.axvline(x = x_f, label = 'x_f')
#plt.plot(x, n_A, color = 'red', label='n_A')
#plt.plot(x, n_B, color = 'blue', label='n_B')
#plt.plot(x, n_C, color = 'green', label='n_C')
#plt.plot(x, n_D, color = 'orange', label='n_D')
plt.legend()
plt.show()
plt.subplot(2,1,2)
plt.xlabel('Avancement x (mol)', fontsize=8)
plt.ylabel('Constante de reaction Q_r \n et constante d\'equilibre K', fontsize=8)
#plt.axvline(x = x_f, label = 'x_f')
plt.axis(xmin=0, xmax=xmax)
plt.plot(x, K*np.ones(len(x)), color = 'blue', label='K')
#plt.plot(x, Q_r, color = 'red', label='Q_r')
plt.yscale('log')
plt.legend()
plt.show()
print('L\'avancement final correspond a x_f = ' + str(x_f) + ' mol, soit un taux d\'avancement final tau_f = ' + str(x_f/xmax) + '.')
2. Certaines lignes ne sont pas complétées. Utilisez la console Python pour effectuer des tests de programmation.