Python (école d'ingénieur) · Chapitre 13 · Exercice
Double pendule
Résolution d'équations différentielles
Énoncé
Simuler un double pendule en écrivant ses équations de Lagrange et en résolvant le système via SciPy.
Corrigé
Les équations différentielles décrivant le comportement chaotique du double pendule sont intégrées à l'aide du solveur solve_ivp.
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
def double_pendule(t, X, m1, m2, L1, L2, g):
theta1, theta2, omega1, omega2 = X
# Calculs intermédiaires
delta_theta = theta1 - theta2
denom1 = m1 + m2 * np.sin(delta_theta)**2
denom2 = (m1 + m2) * L1
# Accélérations
alpha1 = (m2 * L1 * (omega1**2) * np.sin(delta_theta) * np.cos(delta_theta) +
m2 * g * np.sin(theta2) * np.cos(delta_theta) +
m2 * L2 * (omega2**2) * np.sin(delta_theta) -
(m1 + m2) * g * np.sin(theta1)) / (denom1 * L1)
alpha2 = ((-m2 * L2 * (omega2**2) * np.sin(delta_theta) * np.cos(delta_theta) +
(m1 + m2) * g * np.sin(theta1) * np.cos(delta_theta) -
(m1 + m2) * L1 * (omega1**2) * np.sin(delta_theta) -
(m1 + m2) * g * np.sin(theta2)) / (denom1 * L2))
return [omega1, omega2, alpha1, alpha2]
# Paramètres
m1, m2 = 1.0, 1.0
L1, L2 = 1.0, 1.0
g = 9.81
X0 = [np.pi/2, np.pi/2, 0.0, 0.0]
t0, tf = 0.0, 20.0
solution = solve_ivp(double_pendule, [t0, tf], X0,
args=(m1, m2, L1, L2, g),
method='RK45', rtol=1e-8, max_step=0.01)
t = solution.t
theta1, theta2 = solution.y[0], solution.y[1]
# Positions cartésiennes pour le tracé
x1 = L1 * np.sin(theta1)
y1 = -L1 * np.cos(theta1)
x2 = x1 + L2 * np.sin(theta2)
y2 = y1 - L2 * np.cos(theta2)
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(t, theta1, 'b-', label='theta1')
plt.plot(t, theta2, 'r-', label='theta2')
plt.xlabel('t')
plt.ylabel('Angle (rad)')
plt.title('Évolution des angles')
plt.legend()
plt.grid(True, alpha=0.3)
plt.subplot(1, 2, 2)
plt.plot(x2, y2, 'b-', alpha=0.5)
plt.plot(x2[-1], y2[-1], 'ro', markersize=8)
plt.xlabel('x (m)')
plt.ylabel('y (m)')
plt.title('Trajectoire du second pendule')
plt.axis('equal')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Comportement chaotique angulaire et trajectoire spatiale complexe du double pendule.
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.