====== 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 : * ''k'' qui définit la vitesse de réaction * ''A0'' qui correspond à la concentration initiale $[A]_{t = 0}$ * ''B0'' qui correspond à la concentration initiale $[B]_{t = 0} = b(0)$ * ''dt'' qui correspond au pas de temps * ''T'' qui correspond à la durée totale de la simulation * Comme on avance dans la simulation par saut de temps ''dt'' et que la durée totale est ''T'', on peut calculer ''N'', le nombre de saut à faire. * ''a'' qui correspond à la concentration $[A]_{t}$. Mais on ne connaîtra pas $a$ pour tous les temps possibles car on calcul par saut de temps ''dt''. Dans le code ''a'' sera donc une liste et ''a[15]'', par exemple, correspondra à $[A]_{t = 15\cdot dt}$. * ''b'', même chose que ''a'' mais pour $[B]$. * ''t'', sera la liste des instants. Comprendre que ''t[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.