Systèmes d'ÉD et ÉD d'ordre supérieur

Objectifs d'apprentissage

À la fin de cette leçon, vous serez en mesure de :

  • Résoudre numériquement un système d'ÉD couplées
  • Transformer une ÉD d'ordre supérieur en système d'ordre 1
  • Appliquer les méthodes vues (Euler, RK, Adams-Moulton) aux systèmes
  • Choisir la méthode appropriée selon le contexte

Prérequis

  • Méthodes numériques pour ÉD scalaires (Leçons 6.2–6.5)
  • Notation vectorielle
  • Équations différentielles d'ordre 2 (pendule, oscillateurs)

Systèmes d'ÉD du premier ordre

Formulation

Un système de nn équations différentielles couplées s'écrit :

{x1(t)=f1(t,x1,x2,,xn)x2(t)=f2(t,x1,x2,,xn)xn(t)=fn(t,x1,x2,,xn)\begin{cases} x'_1(t) = f_1(t, x_1, x_2, \ldots, x_n) \\ x'_2(t) = f_2(t, x_1, x_2, \ldots, x_n) \\ \vdots \\ x'_n(t) = f_n(t, x_1, x_2, \ldots, x_n) \end{cases}

avec les conditions initiales x1(t0)=x1,0x_1(t_0) = x_{1,0}, x2(t0)=x2,0x_2(t_0) = x_{2,0}, etc.

Notation vectorielle

On regroupe les inconnues dans un vecteur :

X(t)=(x1(t)x2(t)xn(t)),F(t,X)=(f1(t,X)f2(t,X)fn(t,X))\mathbf{X}(t) = \begin{pmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{pmatrix}, \quad \mathbf{F}(t, \mathbf{X}) = \begin{pmatrix} f_1(t, \mathbf{X}) \\ f_2(t, \mathbf{X}) \\ \vdots \\ f_n(t, \mathbf{X}) \end{pmatrix}

Le système s'écrit alors :

X(t)=F(t,X),X(t0)=X0\mathbf{X}'(t) = \mathbf{F}(t, \mathbf{X}), \quad \mathbf{X}(t_0) = \mathbf{X}_0
💡

Principe fondamental

Toutes les méthodes numériques (Euler, RK, Adams-Moulton) s'appliquent composante par composante — il suffit de remplacer les scalaires par des vecteurs.


Exemple : système 2×2

Considérons le système :

{x(t)=xy+ty(t)=ty+xavec x(0)=1,  y(0)=1\begin{cases} x'(t) = xy + t \\ y'(t) = ty + x \end{cases} \quad \text{avec } x(0) = 1, \; y(0) = -1

Résolution par Euler modifiée (h = 0.1)

Pas 0 → 1 : t0=0t_0 = 0, x0=1x_0 = 1, y0=1y_0 = -1

Calcul des dérivées en t0t_0 :

x0=x0y0+t0=1×(1)+0=1x'_0 = x_0 y_0 + t_0 = 1 \times (-1) + 0 = -1
y0=t0y0+x0=0×(1)+1=1y'_0 = t_0 y_0 + x_0 = 0 \times (-1) + 1 = 1

Prédiction :

x~1=x0+hx0=1+0.1×(1)=0.9\tilde{x}_1 = x_0 + h \cdot x'_0 = 1 + 0.1 \times (-1) = 0.9
y~1=y0+hy0=1+0.1×1=0.9\tilde{y}_1 = y_0 + h \cdot y'_0 = -1 + 0.1 \times 1 = -0.9

Calcul des dérivées au point prédit (t1=0.1t_1 = 0.1) :

x~1=x~1y~1+t1=0.9×(0.9)+0.1=0.71\tilde{x}'_1 = \tilde{x}_1 \tilde{y}_1 + t_1 = 0.9 \times (-0.9) + 0.1 = -0.71
y~1=t1y~1+x~1=0.1×(0.9)+0.9=0.81\tilde{y}'_1 = t_1 \tilde{y}_1 + \tilde{x}_1 = 0.1 \times (-0.9) + 0.9 = 0.81

Correction :

x1=x0+h2(x0+x~1)=1+0.12(10.71)=0.9145x_1 = x_0 + \frac{h}{2}(x'_0 + \tilde{x}'_1) = 1 + \frac{0.1}{2}(-1 - 0.71) = 0.9145
y1=y0+h2(y0+y~1)=1+0.12(1+0.81)=0.9095y_1 = y_0 + \frac{h}{2}(y'_0 + \tilde{y}'_1) = -1 + \frac{0.1}{2}(1 + 0.81) = -0.9095

Résolution par Taylor d'ordre 4

Pour Taylor, on doit calculer x,x,y,yx'', x''', y'', y''' à partir du système.

Calcul de xx'' :

x=ddt(xy+t)=xy+xy+1x'' = \frac{d}{dt}(xy + t) = x'y + xy' + 1

Calcul de yy'' :

y=ddt(ty+x)=y+ty+xy'' = \frac{d}{dt}(ty + x) = y + ty' + x'

Ces expressions nécessitent les valeurs de xx' et yy', donc tout se calcule itérativement.


Transformation d'une ÉD d'ordre supérieur

Principe général

Toute ÉD d'ordre nn peut être transformée en un système de nn ÉD d'ordre 1.

💡

Méthode de transformation

Pour une ÉD d'ordre nn :

y(n)=g(t,y,y,y,,y(n1))y^{(n)} = g(t, y, y', y'', \ldots, y^{(n-1)})

On pose :

x1=y,x2=y,x3=y,,xn=y(n1)x_1 = y, \quad x_2 = y', \quad x_3 = y'', \quad \ldots, \quad x_n = y^{(n-1)}

On obtient le système :

{x1=x2x2=x3xn1=xnxn=g(t,x1,x2,,xn)\begin{cases} x'_1 = x_2 \\ x'_2 = x_3 \\ \vdots \\ x'_{n-1} = x_n \\ x'_n = g(t, x_1, x_2, \ldots, x_n) \end{cases}

Exemple : ÉD d'ordre 2

Considérons l'ÉD :

y(t)+p(t)y(t)+q(t)y(t)=r(t)y''(t) + p(t)y'(t) + q(t)y(t) = r(t)

On pose x1=yx_1 = y et x2=yx_2 = y'. Alors :

{x1=x2x2=r(t)p(t)x2q(t)x1\begin{cases} x'_1 = x_2 \\ x'_2 = r(t) - p(t)x_2 - q(t)x_1 \end{cases}

Application au pendule

L'équation du pendule :

θ(t)+gLsin(θ(t))=0\theta''(t) + \frac{g}{L}\sin(\theta(t)) = 0

devient avec x1=θx_1 = \theta et x2=θx_2 = \theta' :

{x1=x2x2=gLsin(x1)\begin{cases} x'_1 = x_2 \\ x'_2 = -\frac{g}{L}\sin(x_1) \end{cases}

Solution linéarisée (petits mouvements)

Pour θ1\theta \ll 1, sin(θ)θ\sin(\theta) \approx \theta, et la solution analytique est :

θ(t)=θ0cos(gLt)+θ0Lgsin(gLt)\theta(t) = \theta_0 \cos\left(\sqrt{\frac{g}{L}}t\right) + \theta'_0 \sqrt{\frac{L}{g}}\sin\left(\sqrt{\frac{g}{L}}t\right)

Oscillateur de Van der Pol

Un exemple classique d'ÉD non linéaire d'ordre 2 :

x(t)(1x2(t))x(t)+x(t)=0x''(t) - (1 - x^2(t))x'(t) + x(t) = 0

avec x(0)=0.5x(0) = 0.5, x(0)=0x'(0) = 0.

Transformation en système

On pose x1=xx_1 = x, x2=xx_2 = x' :

{x1=x2x2=(1x12)x2x1\begin{cases} x'_1 = x_2 \\ x'_2 = (1 - x_1^2)x_2 - x_1 \end{cases}

Résolution par Euler (h = 0.1)

Pas initial : t0=0t_0 = 0, x1=0.5x_1 = 0.5, x2=0x_2 = 0

x1,0=x2=0x'_{1,0} = x_2 = 0
x2,0=(10.25)×00.5=0.5x'_{2,0} = (1 - 0.25) \times 0 - 0.5 = -0.5

Après un pas :

x1,1=0.5+0.1×0=0.5x_{1,1} = 0.5 + 0.1 \times 0 = 0.5
x2,1=0+0.1×(0.5)=0.05x_{2,1} = 0 + 0.1 \times (-0.5) = -0.05

L'oscillateur de Van der Pol exhibe un cycle limite — une solution périodique vers laquelle toutes les trajectoires convergent.


Adams-Moulton pour systèmes

Le schéma prédicteur-correcteur s'applique directement :

Prédicteur (Adams-Bashforth)

X~n+1=Xn+h24(55Fn59Fn1+37Fn29Fn3)\tilde{\mathbf{X}}_{n+1} = \mathbf{X}_n + \frac{h}{24}(55\mathbf{F}_n - 59\mathbf{F}_{n-1} + 37\mathbf{F}_{n-2} - 9\mathbf{F}_{n-3})

Correcteur (Adams-Moulton)

Xn+1=Xn+h24(9F~n+1+19Fn5Fn1+Fn2)\mathbf{X}_{n+1} = \mathbf{X}_n + \frac{h}{24}(9\tilde{\mathbf{F}}_{n+1} + 19\mathbf{F}_n - 5\mathbf{F}_{n-1} + \mathbf{F}_{n-2})

Exemple numérique

Pour le système x=xy+tx' = xy + t, y=ty+xy' = ty + x avec h=0.025h = 0.025 :

tx(t)y(t)
0.0001.0000−1.0000
0.0250.9759−0.9756
0.0500.9536−0.9524
0.0750.9330−0.9303
0.100 (prédit)0.91396−0.90923
0.100 (corrigé)0.91396−0.90923

Algorithme RK4 pour systèmes

python
import numpy as np

def rk4_system(F, t0, X0, h, n_steps):
  """
  Méthode RK4 pour un système d'ÉD.

  Paramètres:
      F: fonction F(t, X) retournant un vecteur
      t0: temps initial
      X0: vecteur des conditions initiales
      h: pas de discrétisation
      n_steps: nombre de pas

  Retourne:
      t, X: temps et matrice des solutions
  """
  X0 = np.array(X0)
  t = [t0]
  X = [X0]

  for j in range(n_steps):
      tj = t[-1]
      Xj = X[-1]

      k1 = h * F(tj, Xj)
      k2 = h * F(tj + h/2, Xj + k1/2)
      k3 = h * F(tj + h/2, Xj + k2/2)
      k4 = h * F(tj + h, Xj + k3)

      X_next = Xj + (k1 + 2*k2 + 2*k3 + k4) / 6

      t.append(tj + h)
      X.append(X_next)

  return np.array(t), np.array(X)

# Exemple : pendule
def pendule(t, X):
  g, L = 9.81, 1.0
  theta, omega = X
  return np.array([omega, -g/L * np.sin(theta)])

t, X = rk4_system(pendule, 0, [0.3, 0], 0.01, 1000)
# X[:, 0] = theta(t), X[:, 1] = omega(t)

Tableau comparatif final des méthodes

CritèreEuler modifiéeRK4Adams-Moulton
TypePas uniquePas uniquePas multiple
Erreur localeO(h3)O(h^3)O(h5)O(h^5)O(h5)O(h^5)
Erreur globaleO(h2)O(h^2)O(h4)O(h^4)O(h4)O(h^4)
Évaluations de f/pas242
StabilitéBonneBonneBonne
Changement de pasFacileFacileDifficile
RecommandéeNonOuiOui

Recommandations pratiques

  • RK4 : méthode par défaut, flexible, précise
  • Adams-Moulton : longues intégrations à pas constant, ff coûteux
  • Euler modifiée : à éviter sauf pour l'enseignement

Résumé

  • Les systèmes d'ÉD se traitent composante par composante avec les mêmes méthodes
  • Toute ÉD d'ordre nn se transforme en système de nn ÉD d'ordre 1
  • RK4 et Adams-Moulton sont les méthodes recommandées (ordre global 4)
  • Le choix dépend du contexte : pas adaptatif vs pas fixe, coût de ff

Pour aller plus loin

La Partie A (conditions initiales) est terminée. Dans les prochaines leçons, nous aborderons la Partie B : les problèmes à conditions aux limites, en commençant par la méthode de tir.