CoCalc Public FilesPremierDossierPartage / Logistique-Separables.sagewsOpen with one click!
Author: Juan Carlos Bustamante
Views : 45
Compute Environment: Ubuntu 18.04 (Deprecated)
typeset_mode(True)

Le modèle logistique p=p(abp)p' = p(a-bp)

Modèle de croissance de population : p(t)p(t), avec a>0,b>0a>0, b>0 et p(t0)=p0p(t_0)=p_0 (voir section 3.1.3, p 61 des notes de cours)

Remarques :

  • p(t)=a/bp(t) = a/b est une solution.
  • Si on suppose que p(t)>0p(t)>0 pour tout tt, alors le sens de variation de p(t)p(t) est donné par le signe de l'expression abpa-bp. Si p>a/bp>a/b, pp est une fonction décroissante, et si $p

Avant la résolution, quelques figures. Ci bas on a établi les valeurs a=12,b=6a=12, b=6

  • Plusieurs courbes solution, avec différentes valeurs initiales (voir les commentaires dans le code), elles apparaîssent en bleu. Ces courbes sont obtenues numériquement, avec la méthode de Runge - Kutta. Pour une résolution exacte, voir plus bas,
  • Le champ de directions. On a tracé le champ des directions associé à l'EDO, dans le même domaine. On voit bien que les courbes semblent suivre les lignes suggérées par le champ.
a from sage.calculus.desolvers import desolve_system_rk4 a = 12 b = 6 t = var('t') p = function('p', t) # p est une fonction de la variable t EDO = diff(p,t) == p*(a - b*p) # On déclare l'EDO à considérer. Bien noter le double signe égal. g = Graphics() # On commence par créer un graphique vide for i in srange(0,12,0.2): # On produit la liste des nombres de 0 à 12, par pas de 0.2. Ces nombres serviront de conditions initiales g += line(desolve_rk4(EDO,p,ics=[0,i], step = 0.02, end_points=[0,0.6])) # Au graphique, on rajoute la courbe solution de l'EDO avec la nouvelle cond. init. var('p')# On fait que p deviene une variable, nécessaire si on veut dessiner le champ. g+= plot_slope_field(p*(a-b*p), (t,0,0.6), (p,0,5), color="red", headlength =2)# on rajoute le champ g.show(ymin=-0, ymax = 4)# On montre le tout, en spécifiant l'étendue de l'axe des ordonnées.
1212
pp

Résolution exacte

Voyons maintenant comment résoudre exactement l'équation. La commande desolve sera utilisée.

var('a,b,t') p=function('p',t) EDO = diff(p,t) == p*(a-b*p) Sol = desolve(EDO,p,ivar=t ) # On rédoud EDO, on cherche p, et la variable indép. est t. Ici c'est nécessaire de le spécifier, car il y a les paremètres a et b aussi. Sol
(a,b,t)\left(a, b, t\right)
log(bp(t)a)log(p(t))a=C+t-\frac{\log\left(b p\left(t\right) - a\right) - \log\left(p\left(t\right)\right)}{a} = C + t

Pour utiliser les conditions initiales, il faut déclarer les nouvelles variables, puis utiliser l'option ics[...] quand on utilise la commande desolve :

var('t_0, p_0') Sol = desolve(EDO,p,ivar=t, ics=[t_0,p_0] ) Sol
(t0,p0)\left(t_{0}, p_{0}\right)
112log(p(t)2)+112log(p(t))=tt0112log(p02)+112log(p0)-\frac{1}{12} \, \log\left(p\left(t\right) - 2\right) + \frac{1}{12} \, \log\left(p\left(t\right)\right) = t - t_{0} - \frac{1}{12} \, \log\left(p_{0} - 2\right) + \frac{1}{12} \, \log\left(p_{0}\right)
solve([Sol], [p(t)])
[log(p(t))=4tlog(7)+log(3)+log(3p(t)2)]\left[\log\left(p\left(t\right)\right) = 4 \, t - \log\left(7\right) + \log\left(3\right) + \log\left(3 \, p\left(t\right) - 2\right)\right]

Annexe : décomposition en fractions partielles

On a du faire la décomposition en fractions partielles de 1x(abx)\displaystyle \frac{1}{x(a-bx)}. Voyons comment le faire avec SAGE

var('x') f= 1/(x*(a-b*x)) f.partial_fraction(x)
xx
b(bxa)a+1ax-\frac{b}{{\left(b x - a\right)} a} + \frac{1}{a x}