Python (école d'ingénieur) · Chapitre 13 · Exercice
Oscillateur harmonique non amorti
Résolution d'équations différentielles
Énoncé
Simuler l'oscillateur harmonique avec , , . Comparer Euler explicite et RK4.
Corrigé
import numpy as np
import matplotlib.pyplot as plt
def oscillateur_amorti(X, t, gamma=0, omega0=2):
y, v = X
return np.array([v, -gamma * v - omega0**2 * y])
def rk4_systeme(F, X0, t0, tf, n, args=()):
h = (tf - t0) / n
t = np.linspace(t0, tf, n+1)
X = np.zeros((n+1, len(X0)))
X[0] = X0
for k in range(n):
k1 = F(X[k], t[k], *args)
k2 = F(X[k] + 0.5*h*k1, t[k] + 0.5*h, *args)
k3 = F(X[k] + 0.5*h*k2, t[k] + 0.5*h, *args)
k4 = F(X[k] + h*k3, t[k] + h, *args)
X[k+1] = X[k] + (h/6)*(k1 + 2*k2 + 2*k3 + k4)
return t, X
def euler_systeme(F, X0, t0, tf, n, args=()):
h = (tf - t0) / n
t = np.linspace(t0, tf, n+1)
X = np.zeros((n+1, len(X0)))
X[0] = X0
for k in range(n):
X[k+1] = X[k] + h * F(X[k], t[k], *args)
return t, X
X0 = [1.0, 0.0]
t0, tf = 0.0, 20.0
n = 200
t_euler, X_euler = euler_systeme(oscillateur_amorti, X0, t0, tf, n, args=(0, 2))
t_rk4, X_rk4 = rk4_systeme(oscillateur_amorti, X0, t0, tf, n, args=(0, 2))
# Solution exacte : y(t) = cos(2t)
t_exact = np.linspace(t0, tf, 500)
y_exact = np.cos(2 * t_exact)
plt.figure(figsize=(10, 6))
plt.plot(t_exact, y_exact, 'k-', linewidth=2, label='Solution exacte')
plt.plot(t_euler, X_euler[:, 0], 'r--', label='Euler explicite')
plt.plot(t_rk4, X_rk4[:, 0], 'b-', label='RK4')
plt.xlabel('t')
plt.ylabel('y(t)')
plt.title('Oscillateur harmonique (non amorti)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Comparaison d'énergie et de trajectoire sur un oscillateur harmonique non amorti.
# Énergie mécanique E = 0.5 * (v^2 + omega0^2 * y^2)
print("Énergie mécanique (Euler) :", 0.5*(X_euler[-1,1]**2 + 4*X_euler[-1,0]**2))
print("Énergie mécanique (RK4) :", 0.5*(X_rk4[-1,1]**2 + 4*X_rk4[-1,0]**2))
print("Énergie exacte (théorique): 2.0")
Résultat dans la console et interprétation : La méthode d'Euler explicite ne conserve pas l'énergie mécanique : elle introduit de l'énergie artificielle au cours du temps (le système diverge). RK4 conserve très bien l'énergie sur l'intervalle d'étude (amplitude stable).
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.