Objectif
À l’aide d’un langage de programmation et à partir de données expérimentales, tracer l’évolution temporelle d’une concentration, d’une vitesse volumique d’apparition ou de disparition et tester une relation donnée entre la vitesse volumique de disparition et la concentration d’un réactif.
# Initialisations diverses
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.optimize import curve_fit
def taux_de_variation(abs_courante, abs_suivante, ord_courante, ord_suivante):
return (ord_suivante - ord_courante)/(abs_suivante - abs_courante)
# Tableau des dates
date = np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])
# Tableau des absorbances
absorbance = np.array([0,0.24,0.44,0.62,0.77,0.91,1.02,1.13,1.21,1.29,1.35,1.41,1.46,1.5,1.54,1.57,1.6,1.62,1.64,1.66,1.68,1.69,1.7,1.71,1.72])
Q1 Coller et compléter ce bloc à la suite du premier.
On calcule la concentration en diiode à partir des absorbances.
# Compléter le calcul de la concentration en diiode
c_I2 =
# Affichage de la courbe
plt.rcParams['figure.figsize'] = [5,4]
plt.plot(date, c_I2, 'rx-', linewidth=0.5, label='Courbe rouge')
plt.legend()
plt.show()
Q2 Coller et compléter ce bloc à la suite du précédent.
On calcule la concentration en ions peroxodisulfate à partir des absorbances.
# Compléter le calcul de la concentration en peroxodisulfate
c_S2O8 =
# Affichage des courbes
plt.rcParams['figure.figsize'] = [5,4]
plt.plot(date, c_S2O8, 'bx-', linewidth=0.5, label='Courbe bleue')
plt.legend()
plt.show()
Q3 Coller et compléter ce bloc à la suite du précédent.
Il peut être judicieux de tracer une autre variable pertinente en fonction du temps, pour vérifier si la réaction suit une loi de vitesse d’ordre 1 par rapport aux ions peroxodisulfate.
# Calcul de la variable pertinente
pertinente =
# Tracé en fonction du temps
plt.rcParams['figure.figsize'] = [5,4]
plt.plot(date, pertinente, 'r+',label='Droite rouge')
plt.legend()
plt.show()
Q4 Coller et compléter ce bloc à la suite du précédent.
Comme on dispose de la concentration en ions peroxodisulfate en fonction du temps, on peut calculer une autre grandeur chimique.
# Calcul de
inconnue = np.zeros(24) # Initialisation d'un tableau de 24 valeurs. La dernière n'est pas calculable.
for i in range(24): # De t=0 à t=23
inconnue[i] = - taux_de_variation(date[i], date[i+1], c_S2O8[i], c_S2O8[i+1])
# Affichage de la courbe
plt.rcParams['figure.figsize'] = [5,4]
# On prend autant de dates que de valeurs dans le tableau inconnue => :len(inconnue) de 0 à 24.
plt.plot(date[:len(inconnue)], inconnue, 'b+', linewidth=0.5, label='Nuage bleu')
plt.legend()
plt.show()
Q5 Coller et compléter ce bloc à la suite du précédent.
Comme on a bien compris quelle est cette variable inconnue, on pense à appliquer la méthode différentielle pour vérifier si la réaction suit une loi de vitesse d’ordre 1 par rapport aux ions peroxodisulfate.
# Affichage de la courbe
plt.rcParams['figure.figsize'] = [5,4]
plt.plot(**ICI**, **LÀ**, 'r+', label='Droite rouge')
plt.legend()
plt.show()
Q6 Coller et compléter ce bloc à la suite du précédent.
On effectue une régression linéaire pour s'assurer de la linéarité du nuage de points.
# La fonction modele est une droite
def modele(x, a, b):
return a*x+b
pop, covop = curve_fit(modele, **ICI**, **LÀ**)
aop, bop = pop
abscisse_modele=np.linspace(0, 0.002, 2)
ordonnee_modele=modele(abscisse_modele,aop,bop)
# On trace à nouveau la courbe et on superpose le modèle
plt.rcParams['figure.figsize'] = [5,4]
plt.plot(**ICI**, **LÀ**, 'r+', label='Nuage rouge')
plt.plot(abscisse_modele, ordonnee_modele, label='Droite bleue')
plt.legend()
plt.show()