Correction - Université Paris-Est Marne-la
Transcription
Correction - Université Paris-Est Marne-la
Université Paris xii – Val de Marne, ufr Sciences et Technologie, Module Libre Sciences l2/s3 Corrigé du TP5 2008–09 Mathématiques expérimentales 1. Schémas d’Euler et du point milieu (a) En introduisant la fonction complexe z(t) = x(t) + iy(t), on remarque que l’équation devient z ′ (t) = −iz(t) dont la solution est z(t) = z(0)e−it , comme z(0) = x(0)+iy(0) = 1, on trouve (x(t), y(t)) en séparant la partie réelle et la partie imaginaire de e−it . Finalement, la solution est x(t) = cos(t) . y(t) = − sin(t) (b) Après intégration du système différentiel entre tk et tk+1 , on obtient ( Rt xk+1 = xk + tkk+1 y(τ )dτ Rt . yk+1 = yk − tkk+1 x(τ )dτ La méthode du point milieu consiste alors à approcher chacune des intégrales par la méthode des trapèzes (dite aussi du point milieu) : Z tk+1 y(tk+1 ) + y(tk ) yk+1 + yk y(τ )dτ ≈ (tk+1 − tk ) =h . 2 2 tk (c) La procédure retourne une liste constituée des couples successifs [xk , yk ] pour 0 6 k 6 n calculés à partir du schéma (1) : [x0 , y0 ], [x1 , y1 ], . . . , [xn , yn ] (d) Il faut d’abord résoudre les systèmes (2) et (3) pour obtenir (xk+1 , yk+1 ) en fonction de (xk , yk ) et non pas de manière implicite comme c’est le cas actuellement. Après quelques calculs, on obtient : ( ( 2 /4)x +hy k k +hyk xk+1 = (1−h1+h xk+1 = xk1+h 2 /4 2 (2) ⇔ , (3) ⇔ 2 −hxk /4)yk −hxk . yk+1 = yk1+h yk+1 = (1−h1+h 2 2 /4 D’où les procédures : > EulerImp:=proc(n) local h,x,y,L,k; h:=evalf(2*Pi/n); x,y:=1,0; L:=[x,y]; for k from 1 to n do x,y:=(x+h*y)/(1+h^2),(y-h*x)/(1+h^2); L:=L,[x,y]; od; L; end; > PointMilieu:=proc(n) local h,x,y,L,k; h:=evalf(2*Pi/n); x,y:=1,0; L:=[x,y]; for k from 1 to n do x,y:=((1-h^2/4)*x+h*y)/(1+h^2/4),((1-h^2/4)*y-h*x)/(1+h^2/4); L:=L,[x,y]; od; L; end; On notera qu’on aurait pu demander M̀aple de résoudre les systèmes via la commande solve, par exemple pour (2) : > solve({xn=xa+h*yn,yn=ya-h*xn},{xn,yn}); h.xa − ya xa + ya.h , xn = yn = − 2 h +1 h2 + 1 (e) On trace toutes les trajectoires sur la même figure : > with(plots): > p1:=plot([EulerExp(10)],color=red,legend="schema Euler explicite"): p2:=plot([EulerImp(10)],color=blue,legend="schema Euler implicite"): p3:=plot([PointMilieu(10)],color=green,legend="schema du point milieu"): p4:=plot([cos(t),-sin(t),t=0..2*Pi],color=black,legend="solution exacte"): > display({p1,p2,p3,p4}); 4 3 2 1 0 -2 -1 0 1 2 3 4 -1 schema Euler explicite solution exacte schema du point milieu schema Euler implicite On observe alors que (3) est le plus proche de la solution exacte, (1) “fuit” vers l’infini par l’extérieur et (2) “s’écrase” vers l’origine par l’intérieur. (f ) Pour (1), on a 2 2 = x2k+1 + yk+1 = (xk + hyk )2 + (yk − hxk )2 = x2k + 2xk hyk + h2 yk2 + yk2 − 2yk hxk + h2 x2k rk+1 h p i2 = (1 + h2 )(x2k + yk2 ) = rk 1 + h2 , √ Ainsi la suite (rk ) est géométrique de raison 1 + h2 > 1, en particulier (rk ) est strictement croissante et tend vers +∞. Pour (2), on a, avec les mêmes calculs, i2 2 2 2 h p (1 + h2 )rk+1 = (1 + h2 )xk+1 + (1 + h2 )yk+1 = rk 1 + h2 , √ Ainsi la suite (rk ) est géométrique de raison 1/ 1 + h2 < 1, en particulier (rk ) est strictement décroissante et tend vers 0. Enfin, pour (3), on a, avec des calculs analogues, # 2 " 2 2 h2 h2 h2 2 2 2 1+ rk+1 = 1− + h (xk + yk ) = 1+ rk , 4 4 4 Ainsi la suite (rk ) est constante. On retrouve bien le comportement graphiquement observé : • (1) produit une spirale qui tend vers l’infini, • (2) produit une spirale qui tend vers l’origine, • (3) produit un polygone inscrit dans un cercle. 2. Modèle Prédateur-Proie (a) La mortalité des lynx et la natalité des lièvres ne sont soumises à aucune contrainte extérieure à leur espèce : les lynx meurent de vieillesse et les jeunes lièvres peuvent grandir en se nourrissant d’herbe (qui pousse à profusion). Ainsi les taux correspondant sont le produit d’un taux par unité de temps M et N ′ (indépendant du temps) et du temps écoulé à savoir h. M représente donc la probabilité de décès d’un lynx par unité de temps (la mortalité) tandis que N ′ représente le nombre moyen de naissances de lièvres par unité de temps et par individu (la fécondité). En revanche, la mortalité des lièvres est d’autant plus grande qu’il y a plus de lynx pour les chasser et les dévorer, de manière moyenne, on peut donc supposer que ces deux quantités sont proportionnelles. De même, la natalité (ou plutôt survie dans leur jeune âge) des lynx est soumise au nombre de proies disponibles pour une bonne croissance du jeune lynx, encore une fois, on les suppose proportionnels. Ainsi, M ′ représente la probabilité pour un lièvre d’être dévoré par lynx présent et par unité de temps tandis que N représente la probabilité pour un jeune lynx d’atteindre la taille adulte par lièvre disponible et par unité de temps. (b) La population pour chaque espèce suit bien évidemment la loi suivante : le nombre d’individus à l’instant tk+1 se décompose en trois parties • le nombre d’individus à l’instant tk • diminué des individus morts (produit du taux de mortalité par le nombre d’individus) • augmenté des individus nés qui ont pu atteindre la taille adulte (produit du taux de natalité par le nombre d’individus). D’où le système indiqué. Après deux opérations élémentaires, celui-ci est équivalent à uk+1 −uk = (N vk − M )uk h . vk+1 −vk = (N ′ − M ′ uk )vk h Les membres de gauche sont les discrétisations classiques d’une dérivée par un taux d’accroissement (quand h tend vers 0, on retrouve la dérivée) donc le système différentiel approché est : ′ u (t) = [N v(t) − M ]u(t) . v ′ (t) = [N ′ − M ′ u(t)]v(t) On reconnaı̂t alors le schéma d’Euler explicite. (c) Encore une fois, on adapte la procédure EulerExp de la section précédente, la seule différence est dans la présentation du résultat, au lieu d’une liste de la forme [u0 , v0 ], [u1 , v1 ], . . . , [un , vn ] on demande une présentation de la forme [u0 , u1 , . . . , un ], [v0 , v1 , . . . , vn ] on crée donc deux listes distinctes pour les (uk ) et les (vk ). Ainsi, > PredatProie:=proc(T,n,M,N,Mp,Np,u0,v0) local h,u,v,U,V,k; h:=evalf(T/n); u,v:=u0,v0; U:=u; V:=v; for k from 1 to n do u,v:=u-M*h*u+N*h*u*v,v-Mp*h*u*v+Np*h*v; U:=U,u; V:=V,v; od; [U],[V]; end; (d) Après avoir tracé > T:=20: n:=100: > U,V:=PredatProie(T,n,0.3,0.002,0.01,0.5,50,200): > plot([seq([U[k],V[k]],k=1..nops(U))]); 200 180 160 140 120 40 45 50 55 60 65 on remarque que l’évolution des populations des deux espèces est approximativement périodique (il faudrait augmenter T à 1000 pour mieux le voir) et de même période. Les populations maximales et minimales se calculent aisément > Umax,Umin,Vmax,Vmin:=max(op(U)),min(op(U)),max(op(V)),min(op(V)); ce qui donne approximativement entre 37 et 68 lynx et entre 104 et 215 lièvres. En traçant > lynx:=plot([seq([(k-1)*T/n,U[k]],k=1..nops(U))],color=red,legend="lynx"): > lievre:=plot([seq([(k-1)*T/n,V[k]],k=1..nops(V))],color=green,legend="lievres"): > display({lynx,lievre}); 200 160 120 80 40 0 5 10 15 20 lievres lynx on trouve une période approximative de 16, 5 entre deux maxima consécutifs. Le décalage entre les pics de population s’explique naturellement ainsi : quand il y a beaucoup de lynx, ceux-ci chassent beaucoup de lièvres dont la population diminue, jusqu’au moment où il n’y en a plus assez pour la croissance des jeunes lynx, c’est alors le nombre de lynx qui diminue, les lièvres, moins chassés, abondent donc à nouveau, et ainsi de suite... (e) Pour n = 10, on observe le même problème que dans la section précédente, une tendance à fuir à l’infini. > n:=10: > U,V:=PredatProie(T,n,0.3,0.002,0.01,0.5,50,200): > plot([seq([U[k],V[k]],k=1..nops(U))]); 500 400 300 200 100 10 20 30 40 50 60 70