Activité
Résoudre avec la méthode d’Euler
Consigne
Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.
Le chapitre 05 annonçait la méthode d’Euler, qui permet de résoudre numériquement une équation différentielle ; elle sert ici à simuler l’évolution du dipôle RC.
L’idée d’Euler est de faire ce que fait la physique : avancer pas à pas. Le point de départ est l’équation différentielle elle-même, qui donne à chaque instant la pente de la courbe :
Comment s’en servir numériquement ? On se souvient de la façon dont on estime une dérivée dans un tableau de mesures : faute de dérivée exacte, on prend le taux de variation entre deux instants voisins, approximation d’autant meilleure que le pas est petit.
Découpons donc le temps en intervalles de largeur et notons la tension à la date . Entre deux instants successifs, la variation s’écrit ; en la reportant dans l’équation, avec la pente évaluée à l’instant déjà connu : Il ne reste qu’à isoler la tension suivante — c’est la relation de récurrence d’Euler :
Le script Ch19_euler.py (dossier scripts/) applique cette recette — listes et boucle, rien de plus — puis superpose le résultat à la solution exacte. Il s’exécute tel quel, à une ligne près (# À COMPLÉTER).
(La suite — solution exacte et tracé — est fournie et n’est pas à modifier.)
Type : graphique Titre : Méthode d’Euler comparée à la solution exacte (charge RC) Rôle : montrer que la méthode d’Euler approche la solution exacte, d’autant mieux que le pas est petit.
- Axe horizontal : temps en secondes (s), de à environ (soit avec s).
- Axe vertical : tension en volts (V), de à environ ; asymptote V.
- Courbes : solution exacte (bleu, cBac, trait plein) ; Euler s (rouge, cPiege, marqueurs ronds) ; Euler s (vert, cDefi, marqueurs carrés).
- Résultat lisible : les pas d’Euler suivent la courbe exacte ; plus est petit, plus l’approximation colle à la solution ( V, s).
Questions :
- Compléter la ligne d’Euler à partir de l’équation différentielle.
- Exécuter avec s (un pas égal à ) : que devient la courbe d’Euler, et pourquoi est-ce une mise en garde ?
- Comparer à la valeur exacte pour s, s et s. Que constate-t-on ?
Fiche O5 - Python (listes, boucles, append) : tout y est rappelé.
Script élève
# Charge d'un condensateur : la methode d'Euler (chapitre 19)
# L'equation differentielle du RC : du_C/dt = (E - u_C)/tau.
# Euler avance pas a pas : u_(n+1) = u_n + dt * (E - u_n)/tau.
# Le script s'execute tel quel, a UNE ligne pres (# À COMPLÉTER).
import math
import matplotlib.pyplot as plt
E = 5.0 # tension de la source (V)
tau = 1.0 # temps caracteristique tau = R*C (s)
dt = 0.1 # pas de temps (s) -- essayer aussi 1.0 puis 0.05
# ---- methode d'Euler : listes + boucle ----
ts = [0.0] # les dates
us = [0.0] # les tensions u_C (condensateur decharge a t=0)
while ts[len(ts) - 1] < 5 * tau:
u_suivant = 0 # u_n + pente x pas # À COMPLÉTER
us.append(u_suivant)
ts.append(ts[len(ts) - 1] + dt)
# ---- la solution exacte, pour comparer (fournie) ----
t_exact = []
u_exact = []
for k in range(501):
t = 0.01 * k
t_exact.append(t)
u_exact.append(E * (1 - math.exp(-t / tau)))
# ---- trace (fourni) ----
plt.plot(t_exact, u_exact, label="solution exacte")
plt.plot(ts, us, "o-", label="méthode d'Euler")
plt.xlabel("t (s)")
plt.ylabel("u_C (V)")
plt.legend()
plt.show()
print("u_C a t = 5 tau : Euler", us[len(us) - 1], "V ; exact",
E * (1 - math.exp(-5.0)), "V")