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.