CoCalc Shared FilesTP / EquatDiffDim2.ipynbOpen in CoCalc with one click!
Author: slimane benmiled
Views : 24

Etude des équations différentielle linéaire en dimension 2

** On se propose dans ce travail d'étudier le comportement des équations différentielles linéaire .**

Dans cette partie vous aller apprendre à utiliser les fonctions:

  • plot: qui permet de dessiner une fonction
  • desolve_system_rk4 qui permet de resoudre les systèmes d'équations différentielles en utilisant la mêthode de RK(4).
  • list_plot: qui permet de dssiner des listes de points.

Modèle densité dépendant et principe d'exclusion compétitive

On souhaite représenter graphiquement l'évolution des solution des équations différentielles suivantes : {dxdt=a11xa12y,dydt=a21xa22y. \left\{\begin{array}{ll} \frac{dx}{dt} &= a_{11} x - a_{12} y,\\ \frac{dy}{dt} &= a_{21}x - a_{22} y. \end{array}\right.

a11,a12,a21,a22Ra_{11},a_{12},a_{21},a_{22}\in \mathbb{R}

Exemple:

  • Puit: (1002)\left(\begin{array}{rr} -1 & 0 \\ 0 & -2 \end{array}\right)

  • Source: (1002)\left(\begin{array}{rr} 1 & 0 \\ 0 & 2 \end{array}\right)

  • point selle: (1002)\left(\begin{array}{rr} 1 & 0 \\ 0 & -2 \end{array}\right)

  • racine double attractant: (1101)\left(\begin{array}{rr} -1 & 1 \\ 0 & -1 \end{array}\right)

  • racine double repulsif: (1101)\left(\begin{array}{rr} 1 & 1 \\ 0 & 1 \end{array}\right)

  • racine double neutre: (0100)\left(\begin{array}{rr} 0 & 1 \\ 0 & 0 \end{array}\right)

  • cycle limite:

(0110)\left(\begin{array}{rr} 0 & 1 \\ -1 & 0 \end{array}\right)

In [1]:
x,y,t=var('x y t')
In [42]:
X=vector([x,y]);X
(x, y)
In [271]:
A= matrix([[1,1],[0,1]]);A
[1 1] [0 1]
In [237]:
A*X
(x + y, y)
In [213]:
A.det()
1
In [214]:
A.trace()
2
In [216]:
A.eigenvalues()
[1, 1]

Pour integrer l'équation différentielle, on va utiliser l'integrateur desolve_odeint de la sous-bibliotheque desolvers de la bibliothèse Calculus de Sage.

Attention: les noeuds de temps dois être précisé. Vous utiliserai: srange(t_int,t_final,dt).

In [44]:
from sage.calculus.desolvers import desolve_odeint
In [184]:
t_interval=srange(0,2,0.1)
In [190]:
etatInit=[-.1,.05]
In [272]:
sol=desolve_odeint(A*X,etatInit,t_interval,[x,y]) #Notice the initial conditions (t, x, y), the independent variable, and the ending t value
In [137]:
sol
array([[ 1.00000000e+00, 5.00000000e+00], [ 1.50197622e+00, 5.14572755e+00], [ 2.04096250e+00, 5.25270832e+00], [ 2.61518734e+00, 5.31574315e+00], [ 3.22232268e+00, 5.32954781e+00], [ 3.85944977e+00, 5.28879967e+00], [ 4.52302775e+00, 5.18818959e+00], [ 5.20886531e+00, 5.02247895e+00], [ 5.91209656e+00, 4.78656251e+00], [ 6.62716103e+00, 4.47553575e+00], [ 7.34778907e+00, 4.08476760e+00], [ 8.06699322e+00, 3.60997791e+00], [ 8.77706609e+00, 3.04731931e+00], [ 9.46958566e+00, 2.39346312e+00], [ 1.01354286e+01, 1.64568898e+00], [ 1.07647924e+01, 8.01977298e-01], [ 1.13472269e+01, -1.38895757e-01], [ 1.18716762e+01, -1.17726173e+00], [ 1.23265308e+01, -2.31246254e+00], [ 1.26996915e+01, -3.54275335e+00], [ 1.29786454e+01, -4.86520654e+00], [ 1.31505532e+01, -6.27561815e+00], [ 1.32023503e+01, -7.76841776e+00], [ 1.31208602e+01, -9.33658344e+00], [ 1.28929214e+01, -1.09715625e+01], [ 1.25055270e+01, -1.26632010e+01], [ 1.19459777e+01, -1.43996816e+01], [ 1.12020478e+01, -1.61674728e+01], [ 1.02621632e+01, -1.79512910e+01], [ 9.11559198e+00, -1.97340769e+01], [ 7.75264509e+00, -2.14969879e+01], [ 6.16488846e+00, -2.32194083e+01], [ 4.34536331e+00, -2.48789799e+01], [ 2.28881451e+00, -2.64516537e+01], [ -8.07503718e-03, -2.79117643e+01], [ -2.54644568e+00, -2.92321299e+01], [ -5.32502021e+00, -3.03841787e+01], [ -8.33986289e+00, -3.13381025e+01], [ -1.15841413e+01, -3.20630401e+01], [ -1.50478934e+01, -3.25272910e+01]])

Solution (t,x)

In [103]:
txpoints=[] for i in [0 .. len(sol)-1] : txpoints.append([t_interval[i],sol[i][0]])# txpoints

Solution (t,y)

In [104]:
typoints=[] for i in [0 .. len(sol)-1] : typoints.append([t_interval[i],sol[i][1]])# txpoints
In [106]:
#To plot we need to choose which pairs we are interested in tx=list_plot(txpoints, plotjoined=true, color='red') ty=list_plot(typoints, plotjoined=true, color='blue')

Figure des solutions dans l'axe x,yx,y

In [239]:
ptInit=point(etatInit,color='blue',size=75)# Etat initiale est en bleu
In [273]:
# La courbe de la solution est en rouge plotSol=list_plot(sol, plotjoined=true, color='red',thickness= 3)
In [274]:
show(plotSol + ptInit)

Figure du champs de vecteurs

In [277]:
champVecteurs=plot_vector_field(A*X, (x, -.6, .6), (y, -.6, .6))
In [278]:
show(champVecteurs+ptInit+plotSol)

Effet d'un changement de variable

In [259]:
P=matrix([[2,-1],[1,1]]);P
[ 2 -1] [ 1 1]
In [260]:
B=P*A*P^-1;B
[-2/3 4/3] [-1/3 2/3]
In [261]:
sol=desolve_odeint(B*X,etatInit,t_interval,[x,y])
In [262]:
ptInit=point(etatInit,color='blue',size=75)# Etat initiale est en bleu plotSol=list_plot(sol, plotjoined=true, color='red',thickness= 3)
In [263]:
champVecteurs=plot_vector_field(B*X, (x, -0.5, 1), (y, -0.5, 1))
In [264]:
show(champVecteurs+ptInit+plotSol)