TP10 : La méthode d`euler 1 Tracer un graphique en python 2

TSI1 – Informatique TP10 : La méthode d’euler
TP10 : La méthode d’euler
1 Tracer un graphique en python
Pour tracer des graphiques en Python, on utilisera le module pyplot de la bibliothèque matplotlib. Par exemple, pour
tracer le graph de la fonction sinus entre 0 et 10 on pourra utiliser le code suivant :
from math import *
import numpy as np
import matplotlib.pyplot as plt
# fabrication automatique des abscisses entre 0 et 10
x=np.linspace(0.,10.)
y=[]
# calcule les valeurs de y
for valeur in x:
y.append(sin(valeur))
# le graphe, avec les options :
# rouge (r) et trait plein (-)
# o à la place de - : gros points
plt.plot(x,y,'r-')
# afficher le graphique
plt.show()
2 Principe de la méthode : décroissance radioactive
On veut modéliser numériquement l’évolution d’un échantillon radioactif. On prendra les valeurs numériques du plutonium
238, un isotope radioactif du plutonium ayant une constante radioactive λ=0.79 siecle1qui se désintègre en émeant des
particules α.
On veut modéliser l’évolution temporelle d’un échantillon de plutonium 238 contenant initialement N0=1 mol d’atomes.
Par définition, la constante radioactive λest la probabilité qu’un atome se désintègre par unité de temps. Si à l’instant t,
l’échantillon contient N(t)atomes, le nombre dN d’atomes se désintégrant entre les instants tet t+dt est :
dN =λN(t)dt. (1)
On en conclut que :
N(t+dt) = N(t)λN(t)dt. (2)
L’équation 2 permet de déterminer numériquement les valeurs de N(t)à un instant quelconque : connaissant N(t= 0) =
N0, on peut se fixer un petit intervalle de temps t, puis calculer successivement :
N(∆t) = N0λN0t,
N(2∆t) = N(∆t)λN(∆t)∆t,
— etc.
On peut ainsi calculer les valeurs de N(tn), avec tn=nt.
1. Écrire une fonction python radioactivite(n0,tmax,deltaT,lamb), prenant comme argument le nombre initial
d’atomes N0, la valeur maximale tmax de t, un pas tet une probabilité de désintégration λet qui retourne deux listes
contenant les valeurs de tnet les valeurs de N(tn)correspondantes.
La syntaxe pour retourner deux listes et les utiliser est la suivante :
from math import *
2. Utiliser la bibliothèque matplotlib pour tracer l’allure de N(t)obtenue pour quelques valeurs de t(0.01, 0.1 et 1 siècle
par exemple). On pourra prendre tmax =5 siècles (tester d’autres valeurs).
3 La méthode d’Euler
La résolution du problème précédent revient en fait à résoudre numériquement une équation diérentielle. En eet, l’équa-
tion 2 peut se ré-écrire sous la forme suivante :
N(t+dt)N(t)
dt =λN(t)dN(t)
dt =λN(t).
2016–2017
TSI1 – Informatique TP10 : La méthode d’euler
On peut donc généraliser la méthode utilisée dans la partie précédente pour résoudre une équation diérentielle du premier
ordre plus générale, de la forme dy
dt =f(y, t), avec la condition initiale y(t0) = y0. C’est la méthode d’Euler qui consiste
(comme dans la partie précédente) à déterminer les valeurs successives de y(t)en fonction de la valeur au temps précédent.
On part de la définition de la dérivée :
dy
dt =lim
h0
y(t+h)y(t)
h,
en choisissant un pas hassez petit on peut écrire
˙y(t) = y(t+h)y(t)
hy(t+h)'y(t) + h˙y(t).
En partant de la condition initiale y(t0) = y0, on peut ainsi calculer y(t0+h) = y(t0) + h˙y(t0) = y0+hf (y0, t)et de
proche en proche déterminer la valeur de yà chaque instant.
Appliquons cee méthode à l’équation diérentielle :
˙y+ 2.3y= 0 avec y(t= 0) = 1.(3)
1. elle est la fonction f(y, t)correspondante? Écrire en python la fonction f(y,t) associée.
2. Définir une fonction python euler(f,t0,y0,tmax,h) prenant en argument :
la fonction f,
la condition initiale t0 et y0,
la valeur tmax maximale du temps pour lequel on veut calculer y(t),
le pas h.
Cee fonction doit retourner deux listes contenant les valeurs de tnet y(tn)pour t0< t < tmax. (on a noté tn=nh, où
nest un nombre entier et hest le pas utilisé.)
3. Utiliser la fonction euler pour résoudre l’équation diérentielle 3 avec h= 0.1et tmax = 5. Comparer le résultat obtenu
avec la solution exacte théorique (à trouver!).
Pour améliorer la précision du résultat, on peut diminuer h, mais le calcul dure alors plus longtemps. Pour mesurer le
temps que met la fonction euler à faire le calcule on peut utiliser la fonction time() du module time. Cee fonction
retourne un nombre en virgule floante égal au temps écoulé en secondes depuis le 01/01/1970 à 00h00.
4. Modifier votre programme pour qu’il ache le temps que met la fonction euler à s’exécuter et comparer les résultats
obtenus pour h= 0.001,h= 0.01 et h= 0.1.
5. Essayer de lancer le programme avec la valeur h= 1. e se passe-t-il?
6. Utiliser la fonction euler pour résoudre des équations diérentielles non soluble analytiquement, par exemple trouver
l’évolution de la vitesse d’un objet qui tombe sur Terre en étant soumis à une force de froement fluide F=kv2.
2016–2017
1 / 2 100%