Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
Table des matières
Autocatalyse
Cet exercice consiste à modéliser le problème de l'autocalyse et à tracer la courbe de la solution
L'équation
On considère la réaction
$$A + B \to 2B$$
La présence $B$ tend à augmenter la production de $B$, c'est pourquoi on parle d'auto-catalyse. Au début, $B$ peut être rare, mais à mesure qu'il est produit et devient plus présent, la réaction s'en trouve accélérer.
On fera l'hypothèse d'une réaction d'ordre 1, c'est à dire :
$$[A]' = -[B]' = -k\cdot[A]\cdot[B]$$
Simulation
La simulation consiste à, connaissant $[A]$ et $[B]$ à un instant, de calculer $[A]'$ et d'en déduire l'évolution de $[A]$. On sait que :
$$[A]_{t + dt} = [A]_t + dt\cdot [A]'_t \quad \text{ ou encore } \quad d[A] = dt\cdot [A]'_t$$
ce qui est approximativement vrai si $dt$ est petit au lieu d'être un objet abstrait qui tend vers $0$.
Dans la simulation on disposera des variables suivantes :
kqui définit la vitesse de réactionA0qui correspond à la concentration initiale $[A]_{t = 0}$B0qui correspond à la concentration initiale $[B]_{t = 0} = b(0)$dtqui correspond au pas de tempsTqui correspond à la durée totale de la simulation- Comme on avance dans la simulation par saut de temps
dtet que la durée totale estT, on peut calculerN, le nombre de saut à faire. aqui correspond à la concentration $[A]_{t}$. Mais on ne connaîtra pas $a$ pour tous les temps possibles car on calcul par saut de tempsdt. Dans le codeasera donc une liste eta[15], par exemple, correspondra à $[A]_{t = 15\cdot dt}$.b, même chose queamais pour $[B]$.t, sera la liste des instants. Comprendre quet[15], par exemple, aura la valeur $15\cdot dt$.
Comme première expérience, on pourra décider que les concentrations sont en $\text{mmol}\cdot\text{L}^{-1}$ et les temps en $\text{min}$. Dans ces unités, on pourra prendre k = 0.02, A0 = 1, B0 = 1E-8, N = 10000 et T = 2000.
Le code
Reprenez ce code et complétez.
# autocatalyse.py
import matplotlib.pyplot as plt
# initialisation des variables
k =
A0 =
B0 =
T =
N =
dt =
t = [0]
a = [A0] # liste initialisée avec la première valeur
b = [B0] # idem
for i in range(N):
da =
db =
# a[-1] est la dernière valeur dans a ;
# append permet d'ajouter un élément à la liste
a.append(a[-1] + da)
b.append(
t.append(t[-1] + dt)
# tracer
plt.plot(t, a, 'b', label = '[A]')
plt.plot(t, b, 'r', label = '[B]')
plt.legend()
plt.show()
En plus
- Modifiez le code pour déterminer le temps au bout du quel $[B]$ atteint 99 % de sa valeur finale.
- Modifiez le code pour connaître la vitesse maximale de réaction, c'est à dire le moment où $|[A]'|$ est maximal.
