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

publicité
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 siecle−1 qui se désintègre en émettant 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 t et t + dt est :
dN = λN (t)dt.
(1)
N (t + dt) = N (t) − λN (t)dt.
(2)
On en conclut que :
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 − λN0 ∆t ,
— N (2∆t) = N (∆t) − λN (∆t)∆t ,
— etc.
On peut ainsi calculer les valeurs de N (tn ), avec tn = n∆t.
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 ∆t et une probabilité de désintégration λ et qui retourne deux listes
contenant les valeurs de tn et 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 différentielle. En effet, l’équation 2 peut se ré-écrire sous la forme suivante :
N (t + dt) − N (t)
dN (t)
= −λN (t) ⇔
= −λN (t).
dt
dt
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 diffé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
y(t + h) − y(t)
= lim
,
h→0
dt
h
en choisissant un pas h assez petit on peut écrire
ẏ(t) =
y(t + h) − y(t)
⇔ y(t + h) ' y(t) + hẏ(t).
h
En partant de la condition initiale y(t0 ) = y0 , on peut ainsi calculer y(t0 + h) = y(t0 ) + hẏ(t0 ) = y0 + hf (y0 , t) et de
proche en proche déterminer la valeur de y à chaque instant.
Appliquons cette méthode à l’équation différentielle :
ẏ + 2.3y = 0
avec y(t = 0) = 1.
(3)
1. Quelle 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.
Cette fonction doit retourner deux listes contenant les valeurs de tn et y(tn ) pour t0 < t < tmax . (on a noté tn = nh, où
n est un nombre entier et h est le pas utilisé.)
3. Utiliser la fonction euler pour résoudre l’équation différentielle 3 avec h = 0.1 et 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. Cette fonction
retourne un nombre en virgule flottante égal au temps écoulé en secondes depuis le 01/01/1970 à 00h00.
4. Modifier votre programme pour qu’il affiche 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. Que se passe-t-il ?
6. Utiliser la fonction euler pour résoudre des équations diffé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 frottement fluide F = −kv 2 .
2016–2017
Téléchargement