Adloun

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()

Illustration 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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →