Livre étudiant – Modélisation numérique du point de bascule
Exercice 3
Un problème de poissons
On suppose à présent que nous avons affaire à la population de morues de l'Atlantique Nord \(u(t)\) (unité arbitraire) en fonction du temps \(t\) (en années). La population de morues \(u\) est soumise à une prédation (ici, la pêche). L'équation différentielle qui régit cette population est :
\begin{equation} \label{Allee_with_predation} \dot u = g(u), \quad\text{où}\quad g(u) = f(u) - pu , \end{equation}
où la quantité \(p\), strictement positive (et constante dans le temps), représente l'effort de prédation. \(p\) dépend donc de la quantité de pêche autorisée, et est d'autant plus grand que la pêche est importante.
Nous allons simuler cette évolution sur 40 ans : \(t = 0\) correspond à l'année \(2000\), et \(t = 40\) à l'année \(2040\).
L'expression de la fonction \(g\) et d'un potentiel \(W\) associé sont donc : $$ g(u) = -(1+p)u + 5u^2 -4u^3 ,\quad W(u) = \frac{1+p}{2}u^2 - \frac{5}{3}u^3 +u^4 + C. $$
1.Tracer en Python, dans un même repère, l'allure de la fonction \(g\) et du potentiel \(W\) associé, pour chacune des valeurs suivantes du paramètre \(p\) : \(p=0,4, \quad p=\frac9{16}= 0,5625 ,\quad p=0,7.\)
Lorsque \(p=\frac 9{16}\) , que se passe-t-il au point \(u=\frac 58=0,625\) ?
2.On suppose ici que \(p=0,57\) (c'est un petit peu plus que \(\frac 9{16})\), et on considère la solution \(t\mapsto u(t)\) issue de la condition initiale \(u(t=0)=1\) (c'est la valeur de l'équilibre stable \(u=u_\text{ext}\) hors prédation).
a. À l'aide du script méthode d'Euler, tracer en Python le graphe de cette solution sur l'intervalle de temps [0,40].
b. Comment pouvez-vous interpréter ce graphe ?
c. Que dire de la population de poissons en 2020 ? En 2040 ?
3.On cherche à étudier l'influence de la prédation (pèche). Tracer les graphes pour \(p=0,4\), \(p=0,56\), \(p=0.57\) et \(p=0,7\). Interpréter ces graphes, en particulier vis à vis de la population de poissons en 2020 puis en 2040.
#Réponse # Script Euler pour plusieurs valeurs de p valeurs_p =
def g(t,u,p): return
a,b = u_0 = n = # nombre de points de l'échantillon voulu t = # initialisation de t de taille n , de type array y = # condition initiale h = # le pas de la subdivision for p in valeurs_p: for k in range(1,n): #range va de 1 à n-1 t[k] =
y[k] = plt.plot(t,y,label = f"solution u(t) pour p={p}"); # autre syntaxe possible plt.plot(t,y,label = "solution u pour p=%2.3f" %(p)); plt.xlabel("t (temps)"); plt.ylabel("u (population de morues)") plt.legend();
4.Dans cette dernière question, on suppose cette fois que la pêche gagne en intensité chaque année : le paramètre \(p\) croît lentement avec le temps (en partant de la valeur \(p=0,4\) à \(t=0\), et en arrivant à \(p=0,5\) à \(t=20 )\) :
\begin{equation}\ p = 0,015 t + 0,4. \end{equation}
On considère la solution \(t\mapsto u(t)\) issue (à nouveau) de la condition initiale \(u(t=0)=1\).
a. À l'aide du script ci-dessous, tracer en Python le graphe de cette solution, sur l'intervalle de temps \([t=0,t=40]\). Comment pouvez-vous interpréter ce graphe ?
# p augmente linéairement entre t = 0 et t = 40
def p(t): return # entrer ici la fonction p(t) def f(t,u,p): return # entrer ici la fonction f(u) a,b = # entrer l'intervalle de résolution u_0 = # entrer la condition initiale n = # nombre de points de l'échantillon voulu t = # initialisation de t de taille n , de type array y = # condition initiale pour y , array de taille n h = # le pas de la subdivision, fct de n
for k in range(1,n): #range va de 1 à n-1 t[k] = y[k] =
plt.xlabel("t (temps)"); plt.ylabel("u (population de morues)") plt.plot(t,y,label ='u(t) pour p augmentant linéairement entre 2000 et 2040'); plt.legend();
4.b. Au vu de la situation, le gouvernement interdit la pêche au moment où la population baisse brutalement (en 2020). Simuler cette situation en utilisant la fonction \(p(t)\) définie ci-dessous. Que peut-on en conclure pour la population de morues ?
# définition de p par morceaux pour b. et c., avec tracé pour vérification
def p(t):
if t< 20 :
valeur = 0.015*t+0.4
else:
valeur = 0
return valeur
v = np.linspace(0,40,100)
plt.plot(v,[p(x) for x in v]);
plt.xlabel("t (temps)");
plt.ylabel("p (facteur de peche)")
4.c.Et si l'interdiction avait eu lieu en 2015 ?
Remarque : l’applet https://mathlets.org/mathlets/phase-lines/ fournit des outils de visualisation des solutions d’équations diff érentielles de ce type, les deux premiers cas de l'ex 1 correspondent au premier et au dernier cas de la liste déroulante proposée par l’applet (en bas à gauche).