Commit 842f5ddf authored by Ludovic Mailleret's avatar Ludovic Mailleret
Browse files

Update simulations_python.md

parent db94fc2f
......@@ -158,7 +158,7 @@ tspan = np.arange(t_0, t_fin, pas_t)
#### Définition du modèle
On définit une fonction qui renvoie la dérivée $\dot x$ en fonction de la valeur de l'état $x$, du temps et des paramètres.
On définit une fonction qui renvoie la dérivée $`\dot x`$ en fonction de la valeur de l'état $`x`$, du temps et des paramètres.
Pour plus de lisibilité du code on désencapsule les paramètres et la valeur des paramètres dans le corps de la fonction en créant des valeurs locales :
......@@ -262,7 +262,7 @@ Il reste à mettre un peu mieux en forme la figure :
fig1.suptitle('Simulation du modèle de Malthus\n $n = {}, m = {}$'.format(n, m), fontsize = '12')
```
notez l'utilisation de la méthode `format()` des chaînes de caractères qui permet de renseigner les valeurs des termes accolades par les valeurs du taux de natalité $n$ et du taux de mortalité $m$ utilisés dans la simulation.
notez l'utilisation de la méthode `format()` des chaînes de caractères qui permet de renseigner les valeurs des termes accolades par les valeurs du taux de natalité $`n`$ et du taux de mortalité $`m`$ utilisés dans la simulation.
- modifier le minimum et le maximum des axes :
......@@ -320,29 +320,29 @@ L'idée est ici de reprendre l'étude faite en cours en simulant une pêcherie d
Nous simulerons notamment l'effet de la durée de la période de surpêche sur la survie du stock, et illustrerons ces résultats avec des figures représentant la densité de population en fonction du temps, et la densité de population en fonction de l'effort de pêche.
Pour rappel, le modèle s'écrit :
$$
~~~math
\dot x = rx\left(\frac{x}{K_a}-1\right)\left(1-\frac{x}{K}\right) - E x
$$
~~~
***
#### Dynamiques par rapport au temps, $E$ constant
#### Dynamiques par rapport au temps, $`E`$ constant
Nous allons tout d'abord intégrer simplement ce modèle, comme nous l'avons fait plus haut, avec $r=1,\ K_a=2,\ K=10,\ E=0.2$ ou $E=0.85$ et $x(0)=10$.
Nous allons tout d'abord intégrer simplement ce modèle, comme nous l'avons fait plus haut, avec $`r=1,\ K_a=2,\ K=10,\ E=0.2`$ ou $`E=0.85`$ et $`x(0)=10`$.
La simulation n'est pas plus compliquée que dans les exemples précédents. Il en va de même pour la représentation graphique de la densité de population par rapport au temps.
#### Dynamiques par rapport au temps, $E$ varie au cours du temps
#### Dynamiques par rapport au temps, $`E`$ varie au cours du temps
Le principe de la simulation est maintenant de faire varier $E$ au cours du temps pour étudier les effets de la surpêche. Pour cela :
Le principe de la simulation est maintenant de faire varier $`E`$ au cours du temps pour étudier les effets de la surpêche. Pour cela :
- créer une fonction `E_varie()`, prenant pour argument le temps $t$ et les paramètres $E_{sust},\ E_{overF},\ T_{sust},\ T_{overF},$ qui selon la valeur du temps $t$ renvoie la valeur $E_{sust}$ (effort de pêche durable) ou $E_{overF}$ (surpêche) comme décrit dans la figure ci-dessous.
- créer une fonction `E_varie()`, prenant pour argument le temps $`t`$ et les paramètres $`E_{sust},\ E_{overF},\ T_{sust},\ T_{overF},`$ qui selon la valeur du temps $`t`$ renvoie la valeur $`E_{sust}`$ (effort de pêche durable) ou $`E_{overF}`$ (surpêche) comme décrit dans la figure ci-dessous.
![effort de peche](./img/effort_peche.png)
*NB : un simple `if` renvoyant la valeur $E_{sust}$ ou $E_{overF}$ selon la valeur du temps $t$ fera l'affaire à ce stade*
*NB : un simple `if` renvoyant la valeur $`E_{sust}`$ ou $`E_{overF}`$ selon la valeur du temps $`t`$ fera l'affaire à ce stade*
......@@ -354,30 +354,30 @@ Le principe de la simulation est maintenant de faire varier $E$ au cours du temp
On choisira pour valeurs de paramètres par exemple :
- $r=1,\ K_a=2,\ K=10,\ E_{sust}=0.2,\ E_{overF}=0.85$
- $T_{sust} = 10$, et : $T_{overF }=9.2$ ou : $T_{overF} =9$
- $`r=1,\ K_a=2,\ K=10,\ E_{sust}=0.2,\ E_{overF}=0.85`$
- $`T_{sust} = 10`$, et : $`T_{overF }=9.2`$ ou : $`T_{overF} =9`$
L'attendu théorique est un stock qui s'éteint si $T_{overF}$ est trop important.
L'attendu théorique est un stock qui s'éteint si $`T_{overF}`$ est trop important.
***
#### Représentation dans l'espace $(E,\ x)$
#### Représentation dans l'espace $`(E,\ x)`$
On veut ici représenter le diagramme de bifurcation du modèle en fonction de $E$ et surajouter dans ce graphique les valeurs de $x$ simulées plus haut en fonction de $E$.
On veut ici représenter le diagramme de bifurcation du modèle en fonction de $`E`$ et surajouter dans ce graphique les valeurs de $`x`$ simulées plus haut en fonction de $`E`$.
La partie bifurcation nécessite de tracer le lieu des points d'équilibre dans le plan $(E, x)$ en générant un `array` $x_{plot}$ entre $K_a$ et $K$ et, comme dans le cours, en calculant la valeur $E_{plot}$ définissant les équilibres et finalement en traçant la courbe définie par $(E_{plot}, x_{plot})$
La partie bifurcation nécessite de tracer le lieu des points d'équilibre dans le plan $`(E, x)`$ en générant un `array` $`x_{plot}`$ entre $`K_a`$ et $`K`$ et, comme dans le cours, en calculant la valeur $`E_{plot}`$ définissant les équilibres et finalement en traçant la courbe définie par $`(E_{plot}, x_{plot})`$
*NB : on n'oubliera pas de tracer $x=0$*
*NB : on n'oubliera pas de tracer $`x=0`$*
Pour la représentation des simulations numériques, on a déjà la valeur de la densité de population $x$ au long du temps `tspan`. Nous avons aussi du calculer `E_varie()` au cours du temps pour tracer la figure ci-dessus. Il suffit alors de tracer la valeur de l'état $x$ au cours du temps en fonction de la valeur de `E_varie()` au cours du temps.
Pour la représentation des simulations numériques, on a déjà la valeur de la densité de population $`x`$ au long du temps `tspan`. Nous avons aussi du calculer `E_varie()` au cours du temps pour tracer la figure ci-dessus. Il suffit alors de tracer la valeur de l'état $`x`$ au cours du temps en fonction de la valeur de `E_varie()` au cours du temps.
......@@ -389,17 +389,17 @@ Un aperçu des résultats attendus et le cas échéant quelques aides à l'écri
### Tordeuse du bourgeon de l'épinette
Nous reprenons l'étude faite en cours sur le modèle de la tordeuse du bourgeon de l'épinette [(Ludwig, Jones et Holling, 1978)](https://jmahaffy.sdsu.edu/courses/f09/math636/lectures/bifurcation_ode/ludwig_ecology_78.pdf). Le modèle que nous allons étudier ici est légèrement différent de celui vu en cours, car nous allons expliciter la population d'oiseaux prédateurs. Avec $x$ la densité de tordeuses et $y$ la densité d'oiseaux, le modèle s'écrit :
$$
Nous reprenons l'étude faite en cours sur le modèle de la tordeuse du bourgeon de l'épinette [(Ludwig, Jones et Holling, 1978)](https://jmahaffy.sdsu.edu/courses/f09/math636/lectures/bifurcation_ode/ludwig_ecology_78.pdf). Le modèle que nous allons étudier ici est légèrement différent de celui vu en cours, car nous allons expliciter la population d'oiseaux prédateurs. Avec $`x`$ la densité de tordeuses et $`y`$ la densité d'oiseaux, le modèle s'écrit :
~~~math
\dot x =rx\left(1-\frac{x}{K}\right) - \frac{\alpha x^2}{h^2+x^2}\ y
$$
$\alpha$ est le nombre maximal de chenilles que les oiseaux peuvent consommer *per capita* ; les autres paramètres ont été vus en cours.
~~~
$`\alpha`$ est le nombre maximal de chenilles que les oiseaux peuvent consommer *per capita* ; les autres paramètres ont été vus en cours.
Nous allons dans un premier temps étudier le modèle à population d'oiseaux constante, représenter plusieurs dynamiques en fonction du temps et tracer le diagramme de bifurcations correspondant dans l'espace $(y,x)$.
Nous allons dans un premier temps étudier le modèle à population d'oiseaux constante, représenter plusieurs dynamiques en fonction du temps et tracer le diagramme de bifurcations correspondant dans l'espace $`(y,x)`$.
Dans un second temps, nous supposerons que la taille de la population d'oiseaux varie lentement, en fonction des captures de chenilles et d'un taux de mortalité. Nous observerons une situation d’enchaînement de bifurcations dynamiques qui crée un cycle d'hysteresis que nous représenterons en fonction du temps et dans l'espace $(y,x)$.
Dans un second temps, nous supposerons que la taille de la population d'oiseaux varie lentement, en fonction des captures de chenilles et d'un taux de mortalité. Nous observerons une situation d’enchaînement de bifurcations dynamiques qui crée un cycle d'hysteresis que nous représenterons en fonction du temps et dans l'espace $`(y,x)`$.
***
......@@ -407,11 +407,11 @@ Dans un second temps, nous supposerons que la taille de la population d'oiseaux
On choisira pour valeurs de paramètres par exemple :
- $r=5,\ K=10,\ h=0.5,\ \alpha = 1$ et la densité de population d'oiseaux $y=7$
- $`r=5,\ K=10,\ h=0.5,\ \alpha = 1`$ et la densité de population d'oiseaux $`y=7`$
La simulation ne pose pas de difficulté particulière par rapport à ce qu'on a fait précédemment (si ce n'est de se rappeler que le carré en Python s'écrit `**2`). Il peut être intéressant de représenter différentes dynamiques afin d'illustrer la multi-stabilité dans ce modèle.
Le tracé du diagramme de bifurcation se fait par une méthode très similaire au modèle sur la pêche via un array `x_plot` et le calcul des $y$ qui correspondent aux valeurs des équilibres.
Le tracé du diagramme de bifurcation se fait par une méthode très similaire au modèle sur la pêche via un array `x_plot` et le calcul des $`y`$ qui correspondent aux valeurs des équilibres.
***
......@@ -420,19 +420,19 @@ Le tracé du diagramme de bifurcation se fait par une méthode très similaire a
Lorsque l'on prend en compte que la taille de la population d'oiseaux varie au cours du temps en fonction des captures, le modèle est directement en 2 dimensions. En supposant que la dynamique des oiseaux est lente par rapport à celle des insectes, on peut cependant déduire le comportement en projetant la dynamique des tordeuses à l'équilibre et en étudiant la dynamique résultante sur les oiseaux (approche dite "lent-rapide"). Comme ici, selon la taille de la population d'oiseaux, différents équilibres peuvent exister et être globalement stable, cela va donner un lieu a un comportement dynamique intéressant que l'on pourra entièrement appréhender sur le diagramme de bifurcation tracé précédemment.
Le modèle prend maintenant la forme :
$$
~~~math
\left\{
\begin{array}{l}
\displaystyle \dot x = rx\left(1-\frac{x}{K}\right) - \frac{\alpha x^2}{h^2+x^2}\ y \\[.2cm]
\displaystyle \dot y = \varepsilon \left(\frac{n \alpha x^2}{h^2+x^2}\ y -m y\right)
\end{array}
\right.
$$
avec $0<\varepsilon\ll 1$, et $n$ et $m$ les taux associés à la natalité et à la mortalité des prédateurs. En pratique fixons $\varepsilon=0.01$, et les paramètres $n=3$ et $m=5$.
~~~
avec $`0<\varepsilon\ll 1`$, et $`n`$ et $`m`$ les taux associés à la natalité et à la mortalité des prédateurs. En pratique fixons $`\varepsilon=0.01`$, et les paramètres $`n=3`$ et $`m=5`$.
La seule difficulté ici est qu'il ne s'agit plus d'intégrer une équation différentielle de dimension 1, mais un système de deux équations différentielles.
Pour cela, il faut fournir à `odeint()` un modèle qui renvoie les valeurs des dérivées de l'état $\dot x$ et $\dot y$ sous forme d'une liste ligne de type `[xdot, ydot]` . `odeint()` renvoie ensuite les valeurs de l'intégration numérique sous forme d'un tableau en dimension 2 dont la $k$-ième colonne représente la valeur de la $k$-ième variable le long de `tspan`.
Pour cela, il faut fournir à `odeint()` un modèle qui renvoie les valeurs des dérivées de l'état $`\dot x`$ et $`\dot y`$ sous forme d'un array ligne de type `[xdot, ydot]` . `odeint()` renvoie ensuite les valeurs de l'intégration numérique sous forme d'un tableau en dimension 2 dont la $`k`$-ième colonne représente la valeur de la $`k`$-ième variable le long de `tspan`.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment