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