Python

Cet article est la suite logique de celui que tu as peut-être déjà lu sur les équations différentielles et Python. Tu pensais en avoir fini ? Si tu as eu une petite frustration en te disant « mais on ne parle pas des systèmes différentiels ? », réjouis-toi, on corrige ça aujourd’hui. Ici, on va comprendre comment on peut utiliser Python pour résoudre des systèmes différentiels et en afficher les solutions.

Pourquoi s’intéresser aux systèmes différentiels ?

Avant d’ouvrir Python, essayons de comprendre l’utilité de ces systèmes différentiels.

Ils permettent de modéliser des phénomènes réels : croissance de populations en interaction, dynamique des épidémies ou encore phénomènes économiques. Partout où plusieurs grandeurs évoluent en même temps et s’influencent, tu trouveras un système différentiel.

De plus, tu es élève en deuxième année de maths appliquées, il y a donc une autre raison : c’est au programme. Autant dire que tu n’as pas trop le choix. Mais, bonne nouvelle, les exercices sur les systèmes différentiels se ressemblent souvent et sont assez mécaniques quand on sait les aborder.

Qu’est-ce qu’un système différentiel ?

Quand tu résous une équation différentielle ordinaire, tu cherches une fonction \(y(t)\) telle que :

\[ y'(t) = f(y,t) \]

Dans un système différentiel, tu ne cherches plus une seule fonction, mais plusieurs. Par exemple, deux fonctions \(x(t)\) et \(y(t)\) qui obéissent à :

\[
\begin{cases}
x'(t) = a \cdot x(t) + b \cdot y(t) \\
y'(t) = c \cdot x(t) + d \cdot y(t)
\end{cases}
\]

Ici, les dérivées de x et y dépendent des deux variables à la fois.

Ce type de système peut se réécrire sous une forme matricielle :

\[ X'(t) = A \cdot X(t) \]

\( X(t) = \begin{pmatrix} x(t) \\ y(t) \end{pmatrix} \quad \text{et} \quad A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \)

Cette écriture est capitale, car elle nous permet d’utiliser l’algèbre linéaire (diagonalisation, valeurs propres…) pour analyser les solutions.

Résolution théorique (et ses limites)

Si tu as vu ça en cours, tu sais que, quand la matrice A est diagonalisable, l’ensemble des solutions du système différentiel est :

\[
S_0 = \left\{
\begin{array}{l}
I \mapsto M_{n,1}(\mathbb{R}) \\[6pt]
t \mapsto \sum_{i=1}^{n} \lambda_i e^{\alpha_i t} U_i , \; (\lambda_1, \lambda_2, \ldots, \lambda_n) \in \mathbb{R}^n
\end{array}
\right\}
\]

Où les \(\lambda_i\) sont les valeurs propres de A et les \(U_i\) les vecteurs propres associés à ces valeurs propres.

Dit autrement, les solutions sont des combinaisons linéaires d’exponentielles.

Mais ce processus n’est pas parfait et il a en particulier deux limites :

  1. On peut avoir du mal à diagonaliser A.
  2. Pire encore, A peut ne pas être diagonalisable.

 

C’est là qu’intervient Python, qui nous permet de résoudre numériquement le système sans nous casser la tête à chaque étape.

Pourquoi utiliser Python ?

Tu pourrais évidemment résoudre ces systèmes à la main. Mais dès que les coefficients deviennent un peu compliqués, ça se transforme vite en cauchemar.

Python, lui, va :

  • calculer les solutions pas à pas, avec un nombre de points énorme ;
  • te donner la trajectoire numérique des solutions ;
  • te permettre de visualiser les trajectoires grâce à matplotlib

 

La fonction magique reste la même que pour les équations différentielles simples : odeint de la bibliothèque scipy.integrate.

La fonction odeint pas à pas

Il faut commencer par importer les bibliothèques et les fonctions dont on aura besoin :


Ensuite, il faut définir trois choses :

  • Un vecteur temps : grâce à np.linspace, on choisit l’intervalle sur lequel on veut étudier la solution.




  • Une condition initiale : c’est le point de départ \(X(0)\). Par exemple :


  • La matrice A associée à ton système qu’on définit à l’aide de la fonction array de la bibliothèque numpy.

 

Une fois qu’on a déclaré ces trois variables, on peut écrire notre fonction qui décrit le système, qui prend en argument X et t, et qui renvoie les dérivées.

Une fois tout ça en place, il suffit d’appeler odeint :

sol est alors une matrice : chaque ligne correspond à un instant, et chaque colonne à une variable (ici, x et y).

Représentation graphique

Tu sais maintenant résoudre le système numériquement. Mais le vrai intérêt de Python est surtout de pouvoir représenter les solutions qu’on a trouvées. Elles peuvent être représentées sous deux formes.

La première manière est de représenter chacune des solutions en fonction du temps :

La deuxième manière, plus intéressante mais applicable uniquement si on n’a que deux fonctions inconnues, est de représenter directement la trajectoire \((x(t),y(t))\) dans le plan :

C’est ce graphique qui te montre comment les deux variables interagissent. Tu peux par exemple observer des points fixes ou des spirales. 

Exemple

Prenons un système concret :

\[
\begin{cases}
x'(t) = 2x(t) + y(t) \\
y'(t) = -x(t) + 3y(t)
\end{cases}
\]

\[
x(0) = 1, \quad y(0) = 0
\]

On va résoudre ce système différentiel et en afficher les solutions avec le script suivant :


En exécutant ce code, tu obtiens à la fois l’évolution des deux fonctions dans le temps, et leur interaction dans le plan.

Voici le résultat obtenu :

Tableau tracé résultat système linéaireportrait de phase du système linéaire

Le premier graphique nous indique une forte instabilité des solutions avec les courbes qui plongent vers l’infini négatif à partir de \(8\). On observe cependant sur le deuxième graphique obtenu qu’il y a une forte corrélation entre les deux solutions. En effet, ce graphique représente l’évolution de \(y(t)\) en fonction de \(x(t)\) et on remarque que la courbe est relativement monotone.

Conclusion

Ainsi, la résolution de systèmes différentiels à l’aide de Python n’est pas très compliquée une fois qu’on a bien compris comment marche la fonction odeint et ce qu’on représente réellement.

Je continue à insister sur le fait qu’il est très important de travailler les équations et les systèmes différentiels, qui je pense feront bientôt l’objet d’un sujet de Parisiennes…

Comme pour les équations différentielles, il n’y a malheureusement pas encore d’annales qui traitent de ce thème, mais cela ne fait que renforcer la probabilité que cela tombe au concours.

Tu peux retrouver ici le méga-répertoire qui contient toutes les annales de concours et les corrigés. Tu peux également accéder ici à toutes nos autres ressources mathématiques !