Python (école d'ingénieur) · Chapitre 13 · Exercice
Décroissance exponentielle
Résolution d'équations différentielles
Énoncé
Soit l'équation différentielle avec .
- Donner la solution analytique.
- Implémenter la méthode d'Euler explicite avec sur .
- Comparer avec la solution exacte.
Corrigé
- La solution analytique est .
- Implémentation et comparaison en Python :
import numpy as np
import matplotlib.pyplot as plt
# Solution analytique
def x_exact(t):
return np.exp(-2 * t)
# Euler explicite
def euler_explicite(f, x0, t0, tf, n):
h = (tf - t0) / n
t = np.linspace(t0, tf, n+1)
x = np.zeros(n+1)
x[0] = x0
for k in range(n):
x[k+1] = x[k] + h * f(x[k], t[k])
return t, x
# Paramètres
f = lambda x, t: -2 * x
x0 = 1.0
t0, tf = 0.0, 3.0
n = 30 # h = 0.1
t_euler, x_euler = euler_explicite(f, x0, t0, tf, n)
t_exact = np.linspace(t0, tf, 300)
x_exact_vals = x_exact(t_exact)
# Erreur
erreur = np.abs(x_euler[-1] - x_exact(t_euler[-1]))
print(f"Valeur exacte à t=3 : {x_exact(3):.6f}")
print(f"Euler explicite à t=3 : {x_euler[-1]:.6f}")
print(f"Erreur absolue : {erreur:.6f}")
# Visualisation
plt.figure(figsize=(10, 6))
plt.plot(t_exact, x_exact_vals, 'k-', linewidth=2, label='Solution exacte')
plt.plot(t_euler, x_euler, 'ro-', markersize=4, label='Euler explicite (h=0.1)')
plt.xlabel('t')
plt.ylabel('x(t)')
plt.title('Décroissance exponentielle')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Décroissance exponentielle résolue par la méthode d'Euler explicite ().
Résultat dans la console :
Valeur exacte à t=3 : 0.002479
Euler explicite à t=3 : 0.002478
Erreur absolue : 0.000001
L'erreur diminue avec le pas (théoriquement en ).
100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.