PCSI 2014/15 TP 6, Equations différentielles

Transcription

PCSI 2014/15 TP 6, Equations différentielles
PCSI 2014/15
TP 6, Equations différentielles
Le modèle de Lotka-Volterra On étudie l’évolution de deux populations, celle des proies notée p1 (t), et
celle des prédateurs notée p2 (t). On suppose que ces populations sont solution du système différentiel :
( dp (t)
1
= (a − bp2 (t))p1 (t)
dt
système de Lotka-Volterra
dp2 (t)
= (−c + dp1 (t))p2 (t)
dt
où a, b, c et d sont quatre constantes positives : intuitivement, a est le taux de croissance de la population des
proies en l’absence de prédateurs, c est le taux de mortalité de la population des prédateurs en l’absence de
proies, b est le taux de mortalité des proies en présence de prédateurs et d est le taux de reproduction des
prédateurs en présence de proies.
Remarquer qu’il y a deux positions d’équilibre, cad deux solutions où p1 et p2 sont constants : la première
où q1 = q2 = 0 (peu réaliste), et la seconde où p1 = c/d et p2 = a/b. On est alors naturellement conduit à
introduire les variables sans dimension x = dp1 /c et y = bp2 /a, le point d’équilibre se situant maintenant à
x = y = 1. Le système précédent se simplifie alors en :
( dx(t)
dt = ax(t)(1 − y(t)
(E)
dy(t)
dt = −cy(t)(1 − x(t))
1. Copier le fichier PCSI/Informatique/ProiesPredateurs.py dans votre répertoire personnel, puis ouvrir
la copie avec IDLE3.
2. Définir une fonction nommée LotkaVolterra() telle que l’instruction odeint(LotkaVolterra,[x0,y0],T)
renvoie les valeurs de la solution de (E) vérifiant la condition initiale : x(0) = x0 et y(0) = y0 échantillonnées aux valeurs de T.
3. Définir une fonction nommée representation() telle que l’instruction representation(x0,y0) renvoie
une figure constituée de deux sous-figures (subplot) : la première sous-figure sera constituée des graphes
de x et y en fonction de t ∈ [0, 20] ; la seconde sera constituée du diagramme de phase correspondant
avec x en abscisse et y en ordonnée. Ne pas hésiter à enjoliver cette figure en ajoutant diverses légendes
qui en facilitent la lecture.
4. Définir une fonction nommée portrait_de_phase() telle que l’instruction portrait_de_phase(10,4)
renvoie une figure dans laquelle il y a 10 portraits de phase coupant chacun la diagonale x = y régulièrement entre l’abscisse 1 et l’abscisse 4. On commencera par :
def portrait_de_phase(N , p):
’N courbes de coordonnées entre 1 et p’
fig = plt.figure()
plt.xlabel(’proies’)
plt.ylabel(’prédateurs’)
plt.axis([0, p, 0 , p])
5. (A faire après avoir étudié l’équation du pendule) Faire varier a et c : créer un script python qui demande
à l’utilisateur d’entrer les valeurs a et c au moyen de l’instruction input(), et qui définit les fonctions
representation() et portrait_de_phase() comme précédemment.
Equation du pendule On considère un pendule régi par l’équation différentielle du second ordre dite normad2 θ
lisée : 2 = − sin(θ) (on peut toujours se ramener à une telle équation en choisissant convenablement l’unité
dt
de mesure du temps.)
odeint ne permet de résoudre que des équations différentielle du premier ordre. On remplace donc l’équation
différentielle précédente par le système différentiel du premier ordre :
(
dx
dt = y
dy
dt
= − sin(x)
où l’inconnue est le vecteur z = (x, y) dépendant de t. On est alors ramené à l’équation précédente en prenant :
x = θ et y = dθ/dt.
1. Copier le fichier PCSI/Informatique/pendule.py dans votre répertoire de scripts python, ouvrir la copie
avec IDLE3,
2. Compléter la définition de la fonction eq_pendule de telle sorte que la définition qui suit de la fonction
solution soit correcte.
3. Ecrire une fonction evolution dépendant d’un paramètre y0 qui renvoie une figure matplotlib qui est
le graphe de la solution θ vérifiant les conditions initiales : θ(0) = 0 et θ0 (0) = y0.
4. Pour certaines valeurs de y0, la solution précédente θ est périodique et oscille entre deux valeurs ±θmax .
Ecrire deux fonctions periode(y0) et theta_max(y0) qui renvoie respectivement la période et l’oscillation maximale de cette solution θ.
5. Faire un graphe avec θmax en abscisse et la période en ordonnées ; on superposera à ce graphe la courbe
d’équation : y = 2π(1 + x2 /16) qui est voisine de la précédente lorsque θmax est petit, d’après la formule
appochée de Borda.
6. Tracer le portrait de phase du pendule : θ est en abscisse et dθ/dt est en ordonnée ; tracer plusieurs
courbes correspondant à différentes conditions initiales.
7. On dispose d’une intégrale première de l’équation du pendule : 12 (dθ/dt)2 − cos(θ) = E, où la quantité
constante E correspond en physique à l’énergie totale (cinétique plus potentielle) du pendule. Le portrait
de phase est ainsi constitué des lignes de niveau de cette fonction énergie. Utiliser la fonction contour
de matplotlib.pyplot pour tracer le portrait de phase.