PCSI – IPT G. Monod
Ingenierie_numerique.docx
4/4
Intégration d’une équation différentielle d’ordre 2 – Pendule simple (d’après concours)
En l’absence de frottements, l’équation du pendule simple est :
2
0
= −
où
θ
est l’angle entre la verticale et le fil du pendule.
On simule le système sur l’intervalle de temps [0,
τ
].
Schéma numérique
Le temps est discrétisé avec un pas
h
=
où
N
est un entier.
On construit alors un tableau à deux indices de taille
(2, N+1)
: les cases d’indices
[0, k]
contiennent les valeurs
θ
(kh)
et celles
d’indices
[1, k]
contiennent les valeurs
θ
.
Le système discrétisé s’écrit sous la forme :
kh h kh
kh h kh kh
θ θ θ
θ θ θ
+ = +
+ = +
ɺ ɺ ɺɺ
.
Dans l’équation (2), la dérivée seconde est donnée par l’équation physique du mouvement.
Objectifs
1/ Comparer (graphiquement) les solutions des équations linéarisées et non linéarisées du pendule simple.
Écrire deux fonctions :
- penduleExact(N, tau, theta0, thetaPoint0, omega0) retournant le tableau des
θ
(kh) ;
- penduleLinearise(N, tau, theta0, thetaPoint0, omega0) (solution lorsque l’approximation sin( )
est effectuée).
2/ Observer l’influence des frottements.
Modifier ces fonctions pour tenir compte d’un moment résistant proportionnel à la vitesse angulaire :
2
0
a
= − −
.
On pourra prendre 2000 points (à ajuster) sur 20 secondes,
θ
0
= 1 rad,
ω
0
= 1 rad/s et a = 0.1 s
-1
.
Rappel numpy
Initialisation d’un tableau à deux indices de N+1 valeurs :
zeros((2,N+1))
.
Vérification
scipy.integrate (cf. odeint).
La syntaxe est de la forme odeint(systeme, conditionsInitiales, t) où :
- systeme(theta, t) est une fonction de la variable
theta =
(tableau à deux indices défini comme ci-dessus) et du
temps retournant la dérivée de theta, c'est-à-dire
ou encore, dans notre exemple,
[theta[1], -a*theta[1] -w0**2*np.sin(theta[0])]
;
- conditionsInitiales est de la forme
[theta0, thetaPoint0]
;
- t =
linspace(debut, fin, nbrePoints)
(cf. aide).
odeint renvoie un tableau de tableaux de la forme […
…] correspondant aux différents instants.