Pendule sans frottement
Pour résoudre cette équation, on retient un schéma d'Euler explicite. On observe l'évolution de l'angle sur une durée de 5 périodes environ. On discrétise le temps total en un grand nombre de pas de temps \(h\) (au moins 2000).
La position initiale est prise égale à \(10^{\circ}\)
Question
Définir sur feuille la fonction \(\dot X = F(X,t)\) ici \(F(thet,thetp,t)\) (sans linéariser) pour le problème du pendule simple et proposer une implantation de cette fonction en Python. Écrire une fonction \(\tt F1(thet,thetp)\) sur Python renvoyant le résultat ci-dessus.
Indice
On a : \(m_1 L_1 \ddot \theta_1 + m_1 g \sin\theta_1 = 0\)
Pour résoudre ce problème, on se ramène à un problème de Cauchy d'ordre 1 : \(\dot X = F(X,t)\).
On a alors le système différentiel suivant : \(\left\{\begin{array}{ll}V(t)=\dot \theta_1(t) \\\dot V=-\frac{ g \sin\theta_1}{L_1} \end{array}\right.\)
On cherche à écrire une fonction \(\tt F1(thet,thetp)\) qui renvoie \(V(t)\) et \(\dot V\).
Solution
def F1(thet,thetp):
V=thetp
Vp=-g/L1*sin(thet)
return V,Vp
Question
Écrire une fonction \(\tt euler2(f,theta0,theta0p)\) algorithme d'Euler pour résoudre cette équation différentielle du second ordre.
Tester l'algorithme avec les conditions initiales données et tracer l'évolution de l'angle au cours du temps.
Solution
def euler2(f,theta0,thetap0):
ang=[theta0]
vit=[thetap0]
for i in range(len(t)-1) :
tmptheta,tmpthetap = f(ang[i],vit[i],t[i]) #
angc=ang[i]+pas*tmptheta
vitc=vit[i]+pas*tmpthetap
ang.append(angc)
vit.append(vitc)
return ang,vit
Pour vérifier le tracé, il est intéressant de chercher une solution analytique du problème. Celle-ci n'est pas facile à déterminer dans le cas général. Cependant, si on choisit des valeurs initiales de l'angle de lâcher petites, l'équation différentielle peut se simplifier.
Question
Proposer une simplification de l'équation différentielle dans le cas où l'angle \(\theta\) est petit, déterminer alors analytiquement la solution temporelle et superposer cette solution à la solution obtenue numériquement.
L'écrire sur Python, on l'appellera \(\tt F2(thet,thetp)\).
Déterminer la pertinence de la simplification réalisée en testant différentes valeurs initiales.
Indice

Solution
# Pour linéariser, on suppose sin(theta) = theta
def F2(thet,thetp):
theta=thetp
thetap=-g/L1*(thet)
return theta,thetap