Objectif de la fiche : tracer l'évolution des quantités de matière des réactifs et des produits lors d'une transformation chimique totale, modélisée par une réaction aA A + aB B = aC C + aD D, et en déduire graphiquement l'avancement maximal et le réactif limitant.
Cette fiche est autonome : tu n'as besoin d'aucun autre document, elle reprend et prolonge le script de la fiche n°1. Chaque étape contient un script incomplet à compléter, puis à copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page si tu n'as pas Thonny sous la main).
Généraliser à une réaction quelconque
- On considère ici une transformation chimique totale, modélisée par une unique réaction de la forme
aA A + aB B = aC C + aD D, oùAetBsont les réactifs,CetDles produits. - Comme dans la fiche n°1, l'idée est de faire varier l'avancement
xpar petits pas, tant que les deux réactifs sont présents, et de stocker à chaque pas les quantités de matière de toutes les espèces (pas seulement des réactifs). - Cette fois, plutôt que d'afficher uniquement le résultat final, l'objectif est de tracer l'évolution complète de ces quantités de matière en fonction de
x, avecmatplotlib. - Cette fiche reprend et prolonge le script de la fiche n°1 : n'hésite pas à la consulter si une étape te paraît obscure.
import matplotlib.pyplot as plt
Définir la fonction et ses listes
- Définis une fonction
evol_qt(aA, aB, aC, aD, nA, nB, nC, nD), qui prend en argument les 4 coefficients stœchiométriques puis les 4 quantités de matière initiales. - Initialise l'avancement
x = 0et le pasdx = 0.001. - Crée une liste
Xcontenant la seule valeurxpour l'instant (elle stockera les valeurs successives de l'avancement), et 4 listesNA,NB,NC,ND, contenant chacune la quantité de matière initiale de l'espèce correspondante.
def evol_qt(aA, aB, aC, aD, nA, nB, nC, nD) :
x = _ # Initialisation de l'avancement
dx = _____ # Incrément d'avancement
X = [_] # Liste stockant les valeurs successives d'avancement
NA = [__] # Liste stockant les quantités de matière du réactif A
NB = [__] # Idem pour le réactif B
NC = [__] # Idem pour le produit C
ND = [__] # Idem pour le produit D
Ce début de fonction ne produit aucun affichage à lui seul (une fonction ne s'exécute que lorsqu'on l'appelle) : c'est normal, la suite de la fonction arrive dans les étapes suivantes.
La boucle while
- Continue la fonction avec la même boucle
whilequ'à la fiche n°1 : tant queNA[-1]etNB[-1]sont strictement positifs. - À chaque tour, augmente
xdedx, ajoute cette nouvelle valeur àX, puis ajoute aux 4 listes les nouvelles quantités de matière : les réactifs diminuent (nA - aA*x,nB - aB*x), les produits augmentent (nC + aC*x,nD + aD*x).
while NA[__]>0 and NB[__]>0 :
x = x + __
X.append(_)
NA.append(nA - __*x)
NB.append(nB - __*x)
NC.append(nC + __*x)
ND.append(nD + __*x)
Indice
Cette boucle doit rester indentée à l'intérieur de la fonction evol_qt, exactement au même niveau que la ligne x = 0 de l'étape précédente — c'est l'indentation qui indique à Python que ce code fait partie de la fonction.
Tracer les 4 courbes
- Toujours à l'intérieur de la fonction, trace les 4 listes en fonction de
X: une courbe rouge pourNA(style'r-'), verte pourNB('g-'), bleue pourNC('b-') et jaune pourND('y-'). Utiliselw=1(épaisseur de trait) et unlabelpour chaque courbe ('nA','nB','nC','nD'). - Ajoute une grille (
plt.grid(True)), les étiquettes des axes ('x (mol)'/'n (mol)') et une légende.
plt.figure(1)
plt.plot(_, __, '___', lw=1, label='__')
plt.plot(_, __, '___', lw=1, label='__')
plt.plot(_, __, '___', lw=1, label='__')
plt.plot(_, __, '___', lw=1, label='__')
plt.grid(True)
plt.xlabel('________')
plt.ylabel('________')
plt.legend()
evol_qt(2, 5, 1, 5, 2, 3, 0, 0)
Indice
La dernière ligne, evol_qt(2, 5, 1, 5, 2, 3, 0, 0), n'est pas indentée : elle se trouve donc à l'extérieur de la fonction, et c'est elle qui déclenche réellement son exécution avec des valeurs précises.
Un graphe avec 4 droites : la rouge (nA) et la verte (nB) qui descendent, la bleue (nC) et la jaune (nD) qui montent. La droite verte doit atteindre 0 la première, aux alentours de x = 0,6 mol.
Analyser le graphe obtenu
- Avec les nombres stœchiométriques
2 A + 5 B = C + 5 Det les quantités initialesnA0 = 2 mol,nB0 = 3 mol,nC0 = 0 mol,nD0 = 0 mol, le réactif limitant se lit directement sur le graphe : c'est B, dont la droite verte est la première à atteindre 0. - L'abscisse à laquelle cette droite touche 0 donne l'avancement maximal : x = 0,6 mol.
- Les quantités de matière finales de toutes les espèces, dans l'hypothèse d'une transformation totale, se lisent alors directement sur le graphe à cette même abscisse — pas besoin de les recalculer séparément.
- Appelle
evol_qtavec d'autres nombres stœchiométriques et d'autres quantités initiales. Essaie en particulier un cas où le réactif limitant n'est pas celui introduit en plus petite quantité — un piège classique déjà rencontré dans la fiche n°1. - Que se passe-t-il sur le graphe si tu pars d'une quantité initiale de produit non nulle (par exemple
nC0 = 1) ? Les droites gardent-elles la même pente ?
Pense-bête — fonction à plusieurs courbes
| def f(a,b,...) : | fonction à plusieurs arguments |
| plt.plot(x,y,'r-',...) | courbe rouge, trait continu |
| label='...' | nom de la courbe dans la légende |
| réactifs | quantités qui diminuent (- aX*x) |
| produits | quantités qui augmentent (+ aX*x) |
| réactif limitant | la droite qui touche 0 en premier |
Pas de Thonny sous la main ? Utilise Basthon
Ouvrir dans un nouvel onglet ↗Ctrl+V ou Cmd+V) le code copié avec les boutons « Copier le code » ci-dessus, puis appuie sur Entrée pour l'exécuter.