︠73b25b26-5937-45ef-8eb2-4031271c8052i︠
%md
## Deux réservoirs couplés.
Le problème traité en cours mène à un système de deux équations différentielles linéaires à coefficients constants, à savoir $$\left\{\begin{array}{ccr}x'_1 & = & -\frac{1}{10}x_1 +\frac{3}{40}x_2\\ x'_2 & = &\frac{1}{10}x_1 -\frac{1}{5}x_2\end{array} \right.$$
Nous avons résolu le système par substitution, nous avons isolé $x_2$ de la première équation puis remplacé, et ainsi obtenu une équation d'ordre 2, linéaire à coefficients constants en $x_1$. Cette équation se résoud facilement (fait en classe).
À l'ordinateur on peut résoudre le système comme suit :
︡0f77bb70-b8ef-4203-82d5-a77d159c0baf︡{"done":true,"md":"## Deux réservoirs couplés.\nLe problème traité en cours mène à un système de deux équations différentielles linéaires à coefficients constants, à savoir $$\\left\\{\\begin{array}{ccr}x'_1 & = & -\\frac{1}{10}x_1 +\\frac{3}{40}x_2\\\\ x'_2 & = &\\frac{1}{10}x_1 -\\frac{1}{5}x_2\\end{array} \\right.$$\n\nNous avons résolu le système par substitution, nous avons isolé $x_2$ de la première équation puis remplacé, et ainsi obtenu une équation d'ordre 2, linéaire à coefficients constants en $x_1$. Cette équation se résoud facilement (fait en classe).\n\nÀ l'ordinateur on peut résoudre le système comme suit :"}
︠6adfe45f-32db-4741-ad05-c8dac0415551s︠
typeset_mode(True)
t = var('t')
x1 = function('x1')(t)
x2 = function('x2')(t)
de1 = diff(x1,t) + 1/10*x1-3/40*x2 == 0
de2 = diff(x2,t) - 1/10*x1 +1/5*x2 == 0
Sols = desolve_system([de1, de2], [x1,x2], ics=[0,-17,-21])
Sols
︡855af8c9-c8f9-4bea-874f-edd899b4bff9︡{"html":"
[$\\displaystyle x_{1}\\left(t\\right) = -\\frac{165}{8} \\, e^{\\left(-\\frac{1}{20} \\, t\\right)} + \\frac{29}{8} \\, e^{\\left(-\\frac{1}{4} \\, t\\right)}$, $\\displaystyle x_{2}\\left(t\\right) = -\\frac{55}{4} \\, e^{\\left(-\\frac{1}{20} \\, t\\right)} - \\frac{29}{4} \\, e^{\\left(-\\frac{1}{4} \\, t\\right)}$]
"}︡{"done":true}︡
︠55a7ef6f-2cbc-4869-ba88-efcbbcbfc295i︠
%md
**Note : ** `Sols` est une liste, le zéroième élément est $x_1$, qui est une expression, pour accéder à la fonction elle-même, il faut prendre le coté droit de l'expression, ce qui se fait avec `rhs`
︡93baa7b6-9fdb-4517-a724-7cbae9ca584c︡︡{"done":true,"md":"**Note : ** `Sols` est une liste, le zéroième élément est $x_1$, qui est une expression, pour accéder à la fonction elle-même, il faut prendre le coté droit de l'expression, ce qui se fait avec `rhs`"}
︠ad5bf8e3-c80c-41b2-94b0-0ff296489814s︠
x1 = Sols[0].rhs()
x2 = Sols[1].rhs()
C1 = plot(x1,t,0,50,legend_label="$x_1$")
C2 = plot(x2,t,0,50, legend_label="$x_2$",color="red")
show(C1+C2, axes_labels=['$t$','$x$'])
︡2ffd0cbd-7284-4875-b658-0f535b7e02a8︡{"file":{"filename":"/home/user/.sage/temp/project-db013a35-ea11-498b-a802-aaeadc1fa2a7/181/tmp_0e_BJx.svg","show":true,"text":null,"uuid":"bee341a8-48c1-4ca3-9488-b552055da91c"},"once":false}︡{"done":true}︡
︠0294e970-d71c-44d2-8caa-5f4d2683aa15︠
︡6fca6226-d1d5-4618-9b6a-1387cc186032︡
︠951a8a90-372a-4c80-ba51-16eca0f2569bi︠
%md
On peut penser que $(t,x_1(t), x_2(t))$ décrit une courbe dans l'espace. À $t=0$ elle commence au point correspondant aux conditions initiales, puis, à mesure que $t$ tend vers $\infty$, les composantes $x_1$ et $x_2$ tendent vers $0$
︡3b7474fc-3f16-4cbd-9712-8f17b3e6a510︡︡{"done":true,"md":"On peut penser que $(t,x_1(t), x_2(t))$ décrit une courbe dans l'espace. À $t=0$ elle commence au point correspondant aux conditions initiales, puis, à mesure que $t$ tend vers $\\infty$, les composantes $x_1$ et $x_2$ tendent vers $0$"}
︠49d7febf-e737-41d2-86b2-115caaefdda4s︠
Courbe = parametric_plot3d([t,x1(t),x2(t)],(t,0,100), color='red')
show(Courbe, aspect_ratio=[1,5,5])
︡f4b125f1-5e09-4554-8a72-441edd6678db︡︡{"done":false,"file":{"uuid":"1071bbc3-ae10-45fe-9a64-3c348874926e","filename":"1071bbc3-ae10-45fe-9a64-3c348874926e.sage3d"}}︡{"html":"","done":false}︡{"done":true}
︠95d0b399-b40e-4384-860e-2fd1d205c843︠
︡c8874f66-13d1-4ac2-b832-869fb089ae46︡
︠e1355937-0c96-4707-b4a3-35efc4f6eac0i︠
%md
### Le plan de phase
Il s'agit du plan $x_1x_2$, on laisse tomber, dans un certain sens, la variable $t$.
On peut aussi d'intéresser au graphique dans le plan de phase, c'est à dire le plan $x_1x_2$. En somme, il s'agit de la projection de la courbe ci-haut.
︡3b47371a-8e32-46c6-b342-4eac8e4f6d85︡︡{"done":true,"md":"### Le plan de phase\nIl s'agit du plan $x_1x_2$, on laisse tomber, dans un certain sens, la variable $t$.\nOn peut aussi d'intéresser au graphique dans le plan de phase, c'est à dire le plan $x_1x_2$. En somme, il s'agit de la projection de la courbe ci-haut."}
︠27d6ca08-8202-4d5b-bea7-3418af901765︠
C = parametric_plot([x1(t),x2(t)], (t,0,50), color="blue")
show(C, aspect_ratio=1/5, axes_labels=['$x_1$','$x_2$'])
︡12e9c57c-a7e1-47e0-a470-75b6ab131f9d︡︡{"once":false,"done":false,"file":{"show":true,"uuid":"5755aa4b-6107-488a-9256-77d291545653","filename":"/projects/db013a35-ea11-498b-a802-aaeadc1fa2a7/.sage/temp/compute1-us/23611/tmp_L3bq6E.svg"}}︡{"html":"","done":false}︡{"done":true}
︠674b681f-30aa-48e1-87b8-9cca4f7f89c6i︠
%md
Plus illustratif encore : on peut tracer le champ de vecteurs donné par le système. En chaque point $(x_1,x_2)$ du plan on dessine un vecteur collinéaire à $(x'_1, x'_2)$. Il indique la direction de la courbe tangente en chaque point.
︡9c20f1c8-92f7-4515-8a15-f5c213a0be0f︡︡{"done":true,"md":"Plus illustratif encore : on peut tracer le champ de vecteurs donné par le système. En chaque point $(x_1,x_2)$ du plan on dessine un vecteur collinéaire à $(x'_1, x'_2)$. Il indique la direction de la courbe tangente en chaque point."}
︠bf0182db-457d-431f-b709-fae61bfc4f2b︠
var("x1,x2");
F=plot_vector_field([-1/10*x1 +3/40*x2,1/10*x1-1/5*x2],(x1,-20,0),(x2,-20,0), color="red")
show(F, axes_labels=['$x_1$','$x_2$'])
︡21494f3f-4126-43f0-9d03-7820d9fb8ab5︡︡{"html":"($\\displaystyle x_{1}$, $\\displaystyle x_{2}$)
","done":false}︡{"once":false,"done":false,"file":{"show":true,"uuid":"df3d0944-7712-4bc5-a5ff-621f60e8633e","filename":"/projects/db013a35-ea11-498b-a802-aaeadc1fa2a7/.sage/temp/compute1-us/23611/tmp_4aLlIA.svg"}}︡{"html":"","done":false}︡{"done":true}
︠79d8843e-1c69-4afb-8a81-c03bffcd801di︠
%md
Mais ce qu'il y a de mieux, c'est de considérer la courbe solution avec le champ.
︡d270c8f3-08c1-4de2-aea8-a49306dc4356︡︡{"done":true,"md":"Mais ce qu'il y a de mieux, c'est de considérer la courbe solution avec le champ."}
︠fb7ffe54-4ac3-4bf6-97c0-00cc35509de5︠
show(F+C, axes_labels=['$x_1$','$x_2$'], aspect_ratio=1/2)
︡34c58490-055b-4887-b3c8-04db3224dcbb︡︡{"once":false,"done":false,"file":{"show":true,"uuid":"a82ba2e6-b75c-47f2-b11e-796702c2f9f3","filename":"/projects/db013a35-ea11-498b-a802-aaeadc1fa2a7/.sage/temp/compute1-us/25385/tmp_z33sP6.svg"}}︡{"html":"","done":false}︡{"done":true}
︠435c38d7-c2d8-468e-8368-46fa94a62c9e︠
︡6581e776-d447-4bbf-8b74-dc794deca8e0︡
︠19688e63-7227-4188-a3a1-07ca467c7c9ci︠
%md
## Des requins et des sardines.
On a considéré le modèle qui décrit un système proie - prédateur. Si $x(t)$ désigne le nombre de proies, et $y(t)$ le nombre de prédateurs, le modèle de Lotka - Volterra s'écrit: $$\left\{ \begin{array}{ccc}x' &= &ax-bxy\\ y' & = & dxy-cy\end{array}\right.$$ où $a,b,c,d>0$.
Il s'agit d'un système non-linéaire, mais on peut quand même dire quelque chose au sujet de la relatin entre $x(t)$ et $y(t)$. Nous avons montré que $$\frac{y^a}{e^{by}}\frac{x^c}{e^{dx}} = K$$ où $K$ est donnée par les conditions initiales. Cette équation décrit une courbe. Ci-bas on la trace en prennant $x_0 = 2.2$ et $y(0) = 5.5$
︡8ee78261-7290-486e-b6c3-3b86e3d5bf5b︡{"done":true,"md":"## Des requins et des sardines.\n\nOn a considéré le modèle qui décrit un système proie - prédateur. Si $x(t)$ désigne le nombre de proies, et $y(t)$ le nombre de prédateurs, le modèle de Lotka - Volterra s'écrit: $$\\left\\{ \\begin{array}{ccc}x' &= &ax-bxy\\\\ y' & = & dxy-cy\\end{array}\\right.$$ où $a,b,c,d>0$.\n\nIl s'agit d'un système non-linéaire, mais on peut quand même dire quelque chose au sujet de la relatin entre $x(t)$ et $y(t)$. Nous avons montré que $$\\frac{y^a}{e^{by}}\\frac{x^c}{e^{dx}} = K$$ où $K$ est donnée par les conditions initiales. Cette équation décrit une courbe. Ci-bas on la trace en prennant $x_0 = 2.2$ et $y(0) = 5.5$"}
︠744ddbf6-2ae6-4d90-9e8d-6e8589b8bd14︠
︡bd6a6536-191b-4fb3-9d02-15c7310dbf1a︡
︠c82f07b9-8690-4a57-8fac-77b689edd54cs︠
a=3
b=1
c=1
d=0.1
︡d37fde5e-1adc-42bf-802f-30e71213ff10︡{"done":true}︡
︠7e758060-52dd-4b89-b890-d2fe8a8fb1efsio︠
K = (5.5^a)*(2.2^c)*e^(d*2.2-b*5.5)
K
︡c38949db-4101-46f5-bb75-20ed2e769b2c︡{"stdout":"1.86395698089772\n"}︡{"done":true}︡
︠c3052b54-634b-4219-b52a-532d698d4d5fi︠
%md
### Le plan de phase
Plutôt que dessiner les deux fonctions $x(t)$ et $y(t)$ en fonction de $t$, on peut faire une courbe paramétrique $\{(x(t),y(t))| t\in \mathbb{R}\}$. C'est le **diagramme de phase**.
︡409e64ae-0f0d-4fa7-aebf-b135e6cd8fa5︡{"done":true,"md":"### Le plan de phase\nPlutôt que dessiner les deux fonctions $x(t)$ et $y(t)$ en fonction de $t$, on peut faire une courbe paramétrique $\\{(x(t),y(t))| t\\in \\mathbb{R}\\}$. C'est le **diagramme de phase**."}
︠1912e699-1b6a-477b-a6a7-558ade917466s︠
var('x,y')
C= implicit_plot((y^a)*(x^c)*e^(-d*x-b*y)-K, (x,0,35),(y,0,8),color="blue")
show(C,aspect_ratio =3,figsize=7, axes_labels=['Proies','Predateurs'] )
︡c269dce4-5d37-4b79-8615-135d4260c759︡{"stdout":"(x, y)\n"}︡{"file":{"filename":"/home/user/.sage/temp/project-db013a35-ea11-498b-a802-aaeadc1fa2a7/314/tmp_Ld3Ods.svg","show":true,"text":null,"uuid":"a37549f9-748d-49de-b724-2d34e39c641f"},"once":false}︡{"done":true}︡
︠858dd55c-fed8-4c7e-b3b6-7827024353e0i︠
%md
Comme avant, on peut aussi tracer le champ de vecteurs, ça nous dit en quel sens la courbe est parcourue.
︡24d118c0-0023-4104-9f0b-96652a9eed45︡︡{"done":true,"md":"Comme avant, on peut aussi tracer le champ de vecteurs, ça nous dit en quel sens la courbe est parcourue."}
︠b49fec91-03ba-4b80-8d8d-18e022aa01fbs︠
F=plot_vector_field([a*x - b *x*y, -c*y + d*x*y],(x,0,35),(y,0,8), color="red")
show(F+C, aspect_ratio =3,figsize=7, axes_labels=['Proies','Predateurs'] )
︡dc82236c-913a-4564-becb-764b0c1509eb︡{"file":{"filename":"/home/user/.sage/temp/project-db013a35-ea11-498b-a802-aaeadc1fa2a7/314/tmp_Nnf8IX.svg","show":true,"text":null,"uuid":"0e55db81-97cf-4faa-9515-b5e245c773c8"},"once":false}︡{"done":true}︡
︠ec6ecac1-cc03-432c-b400-f57c488744fdi︠
%md
Le système est non linéaire, de sorte qu'on ne peut pas le résoudre (facilement). Par contre, on peut demander à SAGE de le faire numériquement. La commande `desolve_system_rk4` fait el boulot. Ici `rk4` dit que c'est la méthode de Runge-Kutta d'ordre 4 qui est utilisée, chose à voir dans vos cours de méthodes numériques.
Cette commande produit une liste qui, dans notre cas contient des triplets $[t,x(t),y(t)]$. En manipulant ces listes on peut produire les courbes $(t,x(t))$, $(t,y(t))$, ou encore, dans le plan de phase, la courbe $(x(t),y(t))$.
︡23182072-b179-48f0-90a7-cc656fd2b1c8︡︡{"done":true,"md":"Le système est non linéaire, de sorte qu'on ne peut pas le résoudre (facilement). Par contre, on peut demander à SAGE de le faire numériquement. La commande `desolve_system_rk4` fait el boulot. Ici `rk4` dit que c'est la méthode de Runge-Kutta d'ordre 4 qui est utilisée, chose à voir dans vos cours de méthodes numériques.\n\nCette commande produit une liste qui, dans notre cas contient des triplets $[t,x(t),y(t)]$. En manipulant ces listes on peut produire les courbes $(t,x(t))$, $(t,y(t))$, ou encore, dans le plan de phase, la courbe $(x(t),y(t))$."}
︠d1105f5d-6409-46de-9365-3ce2dcc81698︠
︡315c67fa-aa93-4658-90dc-130431b87b3d︡
︠2de91aea-9666-48d7-b9a7-3d566cd12a0fs︠
from sage.calculus.desolvers import desolve_system_rk4
x,y,t=var('x y t')
P=desolve_system_rk4([a*x - b *x*y, -c*y + d*x*y],[x,y],ics=[0,0.5,2],ivar=t,step=0.05,end_points=10)
X=[ [i,j] for i,j,k in P]
LX=list_plot(X, plotjoined=True, color="red",legend_label="proies")
Y=[ [i,k] for i,j,k in P]
LY=list_plot(Y, plotjoined=True,color="green", legend_label="predateurs", axes_labels=['$t$',' '])
show(LX + LY)
︡1b62142a-8e99-40a5-a03f-fd7898781628︡{"file":{"filename":"/home/user/.sage/temp/project-db013a35-ea11-498b-a802-aaeadc1fa2a7/314/tmp_5t4TLx.svg","show":true,"text":null,"uuid":"4f6fa2c6-f888-4d5d-99de-a2afd327188c"},"once":false}︡{"done":true}︡
︠0f1192a9-2f17-48f5-a665-3fc6b0d6e750︠
︡c65777e4-50d1-4ac1-85f7-a91cf04ea0f7︡
︠dba9ac91-0520-499b-8a54-afc1eb444485s︠
Phase = [ [j,k] for i,j,k in P]
LP = list_plot(Phase, plotjoined=True)
show(LP)
︡1451f5b0-2cd0-45bc-ba65-0ad83eee614a︡{"file":{"filename":"/home/user/.sage/temp/project-db013a35-ea11-498b-a802-aaeadc1fa2a7/314/tmp_vUObss.svg","show":true,"text":null,"uuid":"df01b6eb-f080-4f39-8a05-7e9f8ddfd7ed"},"once":false}︡{"done":true}︡
︠73509513-d2e0-4e32-9eeb-b62e8def702f︠
︠8034ee0f-9496-4a50-936c-e2aa9302315a︠
︠a18a4415-fecc-4eb2-b154-e020eab93078︠