Chapitre 03

Activités Python

Transformations et équilibre

Activité

Prévoir l’état final

Consigne

Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.

Objectif. Prévoir l’état final d’un système en traçant Qr(x)Q_r(x) puis en repérant l’intersection avec la droite Qr=KQ_r=K.

Le script scripts/Ch03_qr_avancement.py (à ouvrir dans EduPython) reprend la formation de l’ion thiocyanatofer(III). Il calcule QrQ_r pour différentes valeurs de l’avancement et trace la courbe correspondante. Deux lignes sont à compléter : l’expression de Qr(x)Q_r(x) et la valeur de la constante KK. Le script complété permet de vérifier le tracé et la lecture de xfx_f.

Script élève

# -*- coding: utf-8 -*-
"""
Chapitre 3 - Prevoir un etat final avec Qr(x)
------------------------------------------------
Le script trace le quotient de reaction de la formation de FeSCN2+ en
fonction de l'avancement. L'etat final est repere par Qr(x_f) = K.

A ouvrir et executer dans EduPython (menu "Executer" ou touche F5).
Deux lignes sont a completer : l'expression de Qr(x) et la valeur de K.
"""

import matplotlib.pyplot as plt

# Quantites initiales dans V = 1,0 L (valeurs numeriques en mol et mol/L).
n_fe3 = 2.0e-3
n_scn = 1.0e-3
x_max = n_scn


K = 0.0  # A COMPLETER : constante d'equilibre

# Tableaux des avancements puis des Qr, valeur par valeur.
x = []
qr = []
for i in range(500):
    xi = 0.999 * x_max * i / 499
    Qri = 0.0 * xi  # A COMPLETER : expression de Qr pour l'avancement xi
    x.append(xi)
    qr.append(Qri)

# Le point du tableau le plus proche de l'intersection fournit x_f.
indice = 0
for i in range(len(qr)):
    ecart_i = qr[i] - K
    if ecart_i < 0:
        ecart_i = -ecart_i
    ecart_indice = qr[indice] - K
    if ecart_indice < 0:
        ecart_indice = -ecart_indice
    if ecart_i < ecart_indice:
        indice = i
x_f = x[indice]
print("avancement final lu : x_f =", x_f * 1e3, "mmol")

x_mmol = []
for xi in x:
    x_mmol.append(xi * 1e3)
plt.plot(x_mmol, qr, label="$Q_r(x)$")
plt.axhline(K, color="firebrick", linestyle="--", label="$K$")
plt.axvline(x_f * 1e3, color="gray", linestyle=":", label="$x_f$")
plt.xlabel("avancement x (mmol)")
plt.ylabel("$Q_r$")
plt.title("Recherche de l'etat final : $Q_r(x_f)=K$")
plt.grid(True)
plt.legend()
plt.show()

← Retour au portail du chapitre