Physique-chimie · 1re · Enseignement de spécialité · Fiche n°2

Voir une réaction
se dérouler.

Tu sais désormais calculer l'avancement maximal d'une réaction et identifier le réactif limitant. Cette fiche va plus loin : au lieu d'un simple résultat final, tu vas tracer l'évolution complète des quantités de matière de tous les réactifs et produits, du début de la réaction jusqu'à son terme.

evol_qt.py — aperçux = 0.000 mol
nA nB nC nD

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).

00

Généraliser à une réaction quelconque

À savoir
  • 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ù A et B sont les réactifs, C et D les produits.
  • Comme dans la fiche n°1, l'idée est de faire varier l'avancement x par 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, avec matplotlib.
  • 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.
etape0_import.py
import matplotlib.pyplot as plt
01

Définir la fonction et ses listes

Consigne
  • 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 = 0 et le pas dx = 0.001.
  • Crée une liste X contenant la seule valeur x pour l'instant (elle stockera les valeurs successives de l'avancement), et 4 listes NA, NB, NC, ND, contenant chacune la quantité de matière initiale de l'espèce correspondante.
etape1_fonction.py
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
Résultat attendu

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.

02

La boucle while

Consigne
  • Continue la fonction avec la même boucle while qu'à la fiche n°1 : tant que NA[-1] et NB[-1] sont strictement positifs.
  • À chaque tour, augmente x de dx, 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).
etape2_boucle.py
    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.

03

Tracer les 4 courbes

Consigne
  • Toujours à l'intérieur de la fonction, trace les 4 listes en fonction de X : une courbe rouge pour NA (style 'r-'), verte pour NB ('g-'), bleue pour NC ('b-') et jaune pour ND ('y-'). Utilise lw=1 (épaisseur de trait) et un label pour chaque courbe ('nA', 'nB', 'nC', 'nD').
  • Ajoute une grille (plt.grid(True)), les étiquettes des axes ('x (mol)' / 'n (mol)') et une légende.
etape3_trace.py
    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.

Résultat attendu

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.

04

Analyser le graphe obtenu

À observer
  • Avec les nombres stœchiométriques 2 A + 5 B = C + 5 D et les quantités initiales nA0 = 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.
À toi de jouer
  • Appelle evol_qt avec 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éactifsquantités qui diminuent (- aX*x)
produitsquantités qui augmentent (+ aX*x)
réactif limitantla droite qui touche 0 en premier

Pas de Thonny sous la main ? Utilise Basthon

Ouvrir dans un nouvel onglet ↗
Basthon est une console Python qui tourne directement dans le navigateur, sans rien installer. Colle ici (avec 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.