5. Rappel sur les EDO#

Marc BUFFAT, dpt mécanique, Université Claude Bernard Lyon 1

maths

%matplotlib inline
import numpy as np
import sympy as sp
from sympy.plotting import plot
import matplotlib.pyplot as plt
from IPython.core.display import HTML
from IPython.display import display

5.1. Equation différentielle (EDO) d’ordre 1#

5.1.1. EDO d’ordre 1: forme générale explicite#

\[ \mbox{Trouvez } y(t) \mbox{ t.q. } \dot{y} = f(y(t),t) \mbox{ vérifiant la C.I. } y(0)=y_0 \]

5.1.2. EDO d’ordre 1 linéaire homogène#

\[ \dot{y} = a y \mbox{ solution } y(t) = y_0 e^{at}\]

5.1.3. EDO d’ordre 1 linéaire non homogène#

\[ \dot{y} = a y +b \]
  • solution = solution générale homogène + solution particulière

  • solution particulière : méthode variation de la constante

  • solution particulière évidente

\[ y(t) = -\frac{b}{a}\]
from sympy import Derivative, Eq, dsolve
t = sp.symbols('t')
y = sp.symbols('y',cls=sp.Function)
eq = Eq(Derivative(y(t),t),y(t)/2+1)
CI = {y(0):2}
display("EDO",eq,"CI",CI)
sol =  dsolve(eq,ics=CI)
display("solution ",sol)
plot(sol.rhs,(t,0,4),title="solution",ylabel="y(t)");
'EDO'
\[\displaystyle \frac{d}{d t} y{\left(t \right)} = \frac{y{\left(t \right)}}{2} + 1\]
'CI'
{y(0): 2}
'solution '
\[\displaystyle y{\left(t \right)} = 4 e^{\frac{t}{2}} - 2\]
../../_images/0115878496067708ce717d596104d0e4a685fd5b2678d7c27bc0faac662b8d24.png

5.1.4. Système d’équations différentielles d’ordre 1#

5.1.4.1. système EDO d’ordre 1: forme générale#

\[ \mbox{Trouvez } Y(t) \mbox{ t.q. } \dot{Y} = F(Y(t),t) \mbox{ vérifiant les C.I. } Y(0)=Y_0 \]
\[\begin{split} \left\{\begin{array}{c} \dot{y_1} = f_1(y_1,y_2,\ldots,y_n,t) \\ \dot{y_2} = f_2(y_1,y_2,\ldots,y_n,t) \\ \ldots\\ \dot{y_n} = f_n(y_1,y_2,\ldots,y_n,t) \\ \end{array} \right. \end{split}\]

5.1.4.2. Exemple 1#

\[\begin{split} \dot{y_1} = - y_2 \\ \dot{y_2} = y_1 \end{split}\]

soit

\[ \dot{Y} = A Y \mbox{ avec } Y = [y_1,y2] \]

\(\textbf{2 valeurs propres de A }\): \(\pm i\)

changement de variable

\[\begin{split} z_1 = i y_1 + y_2 \\ z_2 = -i y_1 + y_2 \end{split}\]

les coefficients sont les vecteurs propres de A:

  • [i,1] vecteur propre associé à \(-i\)

  • [-i,1] vecteur propre associé à \(i\)

équations découplées

\[\begin{split} \dot{z_1} = -i z_1 \\ \dot{z_2} = +i z_2 \end{split}\]

solutions découplées

\[ z_1 = C_1 e^{-i t} \mbox{ et } z_2 = C_2 e^{+i t} \]

solutions générales

\[ y_1 = i \frac{z_2-z_1}{2} \mbox{ et } y_2 = \frac{z_1 + z_2}{2} \]

pour \(C_1=C_2=1/2\)

\[ y_1 = \sin t \mbox{ et } y_2 = \cos t \]
from sympy import Matrix
y1, y2 = sp.symbols("y_1 y_2", cls=sp.Function)
Y = Matrix([[y1(t)],[y2(t)]])
A = Matrix([[0,-1],[1,0]])
EQ = Eq(Derivative(Y,t).doit(),A*Y)
Y0 = Matrix([[2],[-1]])
display("systeme EDO",EQ, "CI",Y0)
VP = A.eigenvects()
display("VP:",VP)
l1 = VP[0][0]
l2 = VP[1][0]
D = Matrix([[l1,0],[0,l2]])
display("Matrice diagonale D v.p. :",D)
L1 = VP[0][2][0]
L2 = VP[1][2][0]
Q = Matrix([[L1[0],L2[0]],[L1[1],L2[1]]])
display("Matrice de passage Q et Q^-1=",Q,Q.inv())
display("A = Q D Q^-1",Q * D * Q.inv())
z1, z2 = sp.symbols("z_1 z_2", cls=sp.Function)
Z = Matrix([[z1(t)],[z2(t)]])
display("changement de variable ",Eq(Z,Q.inv()*Y))
EQ1 = Eq(Derivative(Z,t).doit(),D*Z)
Z0 = Q.inv()*Y0
display("EDO diagonalisé",EQ1,"C.I",Z0)
sol1 =  dsolve(Derivative(z1(t),t)-l1*z1(t),ics={z1(0):Z0[0]})
sol2 =  dsolve(Derivative(z2(t),t)-l2*z2(t),ics={z2(0):Z0[1]})
display("solution en z:",sol1,sol2)
Ys = Q*Matrix([[sol1.rhs],[sol2.rhs]])
display("solution en Y",Eq(Y,Ys))
'systeme EDO'
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{d}{d t} y_{1}{\left(t \right)}\\\frac{d}{d t} y_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}- y_{2}{\left(t \right)}\\y_{1}{\left(t \right)}\end{matrix}\right]\end{split}\]
'CI'
\[\begin{split}\displaystyle \left[\begin{matrix}2\\-1\end{matrix}\right]\end{split}\]
'VP:'
[(-I,
  1,
  [Matrix([
   [-I],
   [ 1]])]),
 (I,
  1,
  [Matrix([
   [I],
   [1]])])]
'Matrice diagonale D v.p. :'
\[\begin{split}\displaystyle \left[\begin{matrix}- i & 0\\0 & i\end{matrix}\right]\end{split}\]
'Matrice de passage Q et Q^-1='
\[\begin{split}\displaystyle \left[\begin{matrix}- i & i\\1 & 1\end{matrix}\right]\end{split}\]
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{i}{2} & \frac{1}{2}\\- \frac{i}{2} & \frac{1}{2}\end{matrix}\right]\end{split}\]
'A = Q D Q^-1'
\[\begin{split}\displaystyle \left[\begin{matrix}0 & -1\\1 & 0\end{matrix}\right]\end{split}\]
'changement de variable '
\[\begin{split}\displaystyle \left[\begin{matrix}z_{1}{\left(t \right)}\\z_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}\frac{i y_{1}{\left(t \right)}}{2} + \frac{y_{2}{\left(t \right)}}{2}\\- \frac{i y_{1}{\left(t \right)}}{2} + \frac{y_{2}{\left(t \right)}}{2}\end{matrix}\right]\end{split}\]
'EDO diagonalisé'
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{d}{d t} z_{1}{\left(t \right)}\\\frac{d}{d t} z_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}- i z_{1}{\left(t \right)}\\i z_{2}{\left(t \right)}\end{matrix}\right]\end{split}\]
'C.I'
\[\begin{split}\displaystyle \left[\begin{matrix}- \frac{1}{2} + i\\- \frac{1}{2} - i\end{matrix}\right]\end{split}\]
'solution en z:'
\[\displaystyle z_{1}{\left(t \right)} = \left(- \frac{1}{2} + i\right) e^{- i t}\]
\[\displaystyle z_{2}{\left(t \right)} = \left(- \frac{1}{2} - i\right) e^{i t}\]
'solution en Y'
\[\begin{split}\displaystyle \left[\begin{matrix}y_{1}{\left(t \right)}\\y_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}i \left(- \frac{1}{2} - i\right) e^{i t} - i \left(- \frac{1}{2} + i\right) e^{- i t}\\\left(- \frac{1}{2} - i\right) e^{i t} + \left(- \frac{1}{2} + i\right) e^{- i t}\end{matrix}\right]\end{split}\]

5.1.4.3. EDO d’ordre 1 linéaire homogène#

\[ \dot{Y} = \mathbf{A} Y \]

si \(\mathbf{A}\) possède n valeurs propres réelles \(\lambda_k\), la solution générale s’écrit

\[ Y(t) = \sum_{k=1}^n \alpha_k \mathbf{\Lambda}_k e^{\lambda_k t} \]

les \(\alpha_k\) sont solution du système linéaire

\[ \sum_{k=1}^n \alpha_k \mathbf{\Lambda}_k = Y_0 \]

On a donc diagonalisée la matrice \(\mathbf{A} = Q*\mathbf{D}*Q^{-1}\) pour obtenir un système EDO linéaire découplée $\( \dot{Z} = \mathbf{D} Z \mbox{ avec } Z = \mathbf{Q}^{-1} {Y} \)$

5.1.4.4. Exemple 2#

\[\begin{split} \dot{y_1} = 2 y_1 - y_2 \\ \dot{y_2} = -y_1 + 2 y_2 \end{split}\]
from sympy import Matrix
y1, y2 = sp.symbols("y_1 y_2", cls=sp.Function)
Y = Matrix([[y1(t)],[y2(t)]])
A = Matrix([[2,-1],[-1,2]])
EQ = Eq(Derivative(Y,t).doit(),A*Y)
Y0 = Matrix([[2],[-1]])
display("systeme EDO",EQ, "CI",Y0)
VP = A.eigenvects()
l1 = VP[0][0]
l2 = VP[1][0]
D = Matrix([[l1,0],[0,l2]])
display("Matrice diagonale D v.p. :",D)
L1 = VP[0][2][0]
L2 = VP[1][2][0]
Q = Matrix([[L1[0],L2[0]],[L1[1],L2[1]]])
display("Matrice de passage Q=",Q)
display("Q D Q^-1",Q * D * Q.inv())
z1, z2 = sp.symbols("z_1 z_2", cls=sp.Function)
Z = Matrix([[z1(t)],[z2(t)]])
display("changement de variable ",Eq(Z,Q.inv()*Y))
EQ1 = Eq(Derivative(Z,t).doit(),D*Z)
Z0 = Q.inv()*Y0
display("EDO diagonalisé",EQ1,"C.I",Z0)
sol1 =  dsolve(Derivative(z1(t),t)-l1*z1(t),ics={z1(0):Z0[0]})
sol2 =  dsolve(Derivative(z2(t),t)-l2*z2(t),ics={z2(0):Z0[1]})
display("solution en z:",sol1,sol2)
Ys = Q*Matrix([[sol1.rhs],[sol2.rhs]])
display("solution en Y",Eq(Y,Ys))
'systeme EDO'
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{d}{d t} y_{1}{\left(t \right)}\\\frac{d}{d t} y_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}2 y_{1}{\left(t \right)} - y_{2}{\left(t \right)}\\- y_{1}{\left(t \right)} + 2 y_{2}{\left(t \right)}\end{matrix}\right]\end{split}\]
'CI'
\[\begin{split}\displaystyle \left[\begin{matrix}2\\-1\end{matrix}\right]\end{split}\]
'Matrice diagonale D v.p. :'
\[\begin{split}\displaystyle \left[\begin{matrix}1 & 0\\0 & 3\end{matrix}\right]\end{split}\]
'Matrice de passage Q='
\[\begin{split}\displaystyle \left[\begin{matrix}1 & -1\\1 & 1\end{matrix}\right]\end{split}\]
'Q D Q^-1'
\[\begin{split}\displaystyle \left[\begin{matrix}2 & -1\\-1 & 2\end{matrix}\right]\end{split}\]
'changement de variable '
\[\begin{split}\displaystyle \left[\begin{matrix}z_{1}{\left(t \right)}\\z_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}\frac{y_{1}{\left(t \right)}}{2} + \frac{y_{2}{\left(t \right)}}{2}\\- \frac{y_{1}{\left(t \right)}}{2} + \frac{y_{2}{\left(t \right)}}{2}\end{matrix}\right]\end{split}\]
'EDO diagonalisé'
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{d}{d t} z_{1}{\left(t \right)}\\\frac{d}{d t} z_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}z_{1}{\left(t \right)}\\3 z_{2}{\left(t \right)}\end{matrix}\right]\end{split}\]
'C.I'
\[\begin{split}\displaystyle \left[\begin{matrix}\frac{1}{2}\\- \frac{3}{2}\end{matrix}\right]\end{split}\]
'solution en z:'
\[\displaystyle z_{1}{\left(t \right)} = \frac{e^{t}}{2}\]
\[\displaystyle z_{2}{\left(t \right)} = - \frac{3 e^{3 t}}{2}\]
'solution en Y'
\[\begin{split}\displaystyle \left[\begin{matrix}y_{1}{\left(t \right)}\\y_{2}{\left(t \right)}\end{matrix}\right] = \left[\begin{matrix}\frac{3 e^{3 t}}{2} + \frac{e^{t}}{2}\\- \frac{3 e^{3 t}}{2} + \frac{e^{t}}{2}\end{matrix}\right]\end{split}\]

5.2. Equation différentielle (EDO) d’ordre 2#

5.2.1. EDO d’ordre 2: forme générale explicite#

\[ \mbox{Trouvez } y(t) \mbox{ t.q. } \ddot{y} = f(y,\dot{y},t) \mbox{ vérifiant les C.I. } y(0)=y_0, \dot{y}(0)=u_0 \]

5.2.2. EDO d’ordre 2 linéaire homogène#

  1. Cas général:

\[ a\ddot{y} + b\dot{y} + c y = 0\]

racines du polynôme caractéristique \(a\lambda^2 + b\lambda + c\)

  1. Equation en mécanique: système dynamique avec force de rappel (fonction de y), et un amortissement (fonction de \( \dot{y}\)

\[ \ddot{y} + 2\lambda_0 \dot{y} +\omega_0^2 y = 0\]

solution fonction du signe de \(\Delta = \lambda_0^2 -\omega_0^2\)

  • \(\Delta>0\) régime apériodique

\[ y(t) = e^{-\lambda_0 t} (A e^{\alpha t} + B e^{-\alpha t}) \mbox{ avec } \alpha = \sqrt{\Delta}\]
  • \(\Delta=0\) régime critique

\[ y(t) = e^{-\lambda_0 t} (A t + B)\]
  • \(\Delta<0\) régime pseudo-péroidique

\[ y(t) = e^{-\lambda_0 t} (A \cos{\omega t} + B \sin{\omega t}) \mbox{ avec } \omega = \sqrt{-\Delta}\]
lambda0, omega0 = sp.symbols("lambda_0 omega_0")
eq = Derivative(y(t),t,t) + 2*lambda0*Derivative(y(t),t) + omega0**2*y(t)
display("EDO ",eq)
# amortie
Valnum={lambda0:2,omega0:1}
# critique
#Valnum={lambda0:1,omega0:1}
# pseudo per.
#Valnum={lambda0:1/sp.S(4),omega0:1}
# periodique
Valnum={lambda0:0,omega0:1}
Delta = float((lambda0*2-omega0**2).subs(Valnum))
display(Valnum,"Delta=",Delta)
CI={y(0):1,Derivative(y(t),t).subs(t,0):0}
display("CI:",CI)
sol = dsolve(eq.subs(Valnum),ics=CI)
display("solution :",sol)
plot(sol.rhs,(t,0,20),title="solution EDO pour $\Delta ={}$".format(Delta),ylabel="y(t)");
'EDO '
\[\displaystyle 2 \lambda_{0} \frac{d}{d t} y{\left(t \right)} + \omega_{0}^{2} y{\left(t \right)} + \frac{d^{2}}{d t^{2}} y{\left(t \right)}\]
{lambda_0: 0, omega_0: 1}
'Delta='
-1.0
'CI:'
{y(0): 1, Subs(Derivative(y(t), t), t, 0): 0}
'solution :'
\[\displaystyle y{\left(t \right)} = \cos{\left(t \right)}\]
../../_images/751ef89bfaa4aee013f28d38a64f9619c5866fe9abe9fd51357d978de39d4881.png

5.2.3. EDO d’ordre 2 linéaire avec forçage \(f(t)\)#

\[ \ddot{y} + \omega_0^2 y = f(t)\]
  • solution = solution équation homogène + solution particulière

  • si forçage harmonique \(f(t)= A \cos(\omega_1 t)\)

  • la solution dépend de la valeur de \(\omega_1\) par rapport à \(\omega_0\)

    • si \(\omega_1 \neq \omega_0\) solution particulière \( y(t) = \alpha \cos{\omega_1 t}\)

    • si \(\omega_1 = \omega_0\) résonnance: solution particulière \( y(t) = t \sin{\omega_0 t}\)

omega1, A = sp.symbols("omega_1 A")
eq = Eq(Derivative(y(t),t,t) + omega0**2*y(t),A*sp.cos(omega1*t))
display("EDO ",eq)
# sans forcage
Valnum={omega0:1,omega1:1/sp.S(2),A:0/sp.S(3)}
# avec forcage
#Valnum={omega0:1,omega1:1/sp.S(2),A:1/sp.S(3)}
# avec forcage +
#Valnum={omega0:1,omega1:6/sp.S(5),A:1/sp.S(3)}
# resonnance
#Valnum={omega0:1,omega1:1,A:1/sp.S(3)}
#
sol = dsolve(eq.subs(Valnum),ics=CI)
display("solution: ",sol)
plot(sol.rhs,(t,0,40),title="solution EDO pour ${}$".format(Valnum),ylabel="y(t)");
'EDO '
\[\displaystyle \omega_{0}^{2} y{\left(t \right)} + \frac{d^{2}}{d t^{2}} y{\left(t \right)} = A \cos{\left(\omega_{1} t \right)}\]
'solution: '
\[\displaystyle y{\left(t \right)} = \cos{\left(t \right)}\]
../../_images/edae94ae8f355d6ed6564cb63527ec7164c5cc821d2466cec5657965d0fd1b57.png

5.2.4. Transformation en EDO d’ordre 1#

Tous système d’équations différentielles peut se mettre sous la forme générique d’un système différentielle d’ordre 1

\[ \dot{\mathbf{Y}} = F(\mathbf{Y},t) \mbox{ avec } \mathbf{Y}(t) \mbox{ fonction dans } \mathcal{R}^n\]

La transformation utilise un changement de variable

  • pour une EDO d’ordre n, on prend comme inconnues la fonction et toutes les dérivées jusqu’à l’ordre n-1

\[ Y_1 = y(t), Y_2 = \frac{dy}{dt},\ldots, Y_n = \frac{d^{n-1}y}{dt^{n-1}} \]

Important cette forme d’EDO d’ordre 1 est la forme générique pour la résolution numérique des EDO

5.2.4.1. transformation EDO d’ordre 2#

  • équation générique d’ordre 2

\[ \ddot{y} = f(\dot{y}(t), y(t), t) \]
  • système d’ordre 1 équivalent

\[\begin{split} \dot{\mathbf{Y}} = F(\mathbf{Y},t) \mbox{ avec } \mathbf{Y} = \left[ \begin{array}{c} {y_1}(t)\\ {y_2}(t)\\ \end{array} \right] \mbox{ soit } \left[ \begin{array}{c} \dot{y_1}(t)\\ \dot{y_2}(t)\\ \end{array} \right] = \left[ \begin{array}{c} y_2(t)\\ f(y_2(t),y_1(t),t)\\ \end{array} \right] \end{split}\]

5.2.4.2. exemple#

équation d’un système dynamique sans amortissement:

\[ \ddot{y} +\omega_0^2 y = 0\]
  1. transformation en EDO d’ordre 1

\[\begin{split} \dot{\mathbf{Y}} = \mathbf{A}\mathbf{Y} \mbox{ avec } \mathbf{Y} = \left[ \begin{array}{c} {y_1}(t) = y(t)\\ {y_2}(t) = \dot{y}(t)\\ \end{array} \right] \mbox{ et } \mathbf{A} = \left[ \begin{array}{cc} 0 & 1\\ -\omega_0^2 & 0\\ \end{array} \right] \end{split}\]
  1. valeurs propres:

    • équation caractéristique

    \[\det(\lambda Id -A) = \lambda^2 + \omega_0^2 = 0\]
    • 2 racines complexes conjuguées \(\lambda = \pm i \omega_0 \)

    • d’où la solution générale

    \[ y(t) = Z_1 e^{i \omega_0 t} + Z_2 e^{- i \omega_0 t} \]
    • qui correspond à la solution périodique

    \[ y(t) = A \cos{\omega_0 t} + B \sin{\omega_0 t} \]

5.3. Résolution numérique des EDO#

  • transformation en un système d’EDO d’ordre 1

  • résolution d’EDO d’ordre 1 :

\[ \dot{y}(t) =\frac{dy}{dt} = f(y(t),t) \mbox{ avec une CI } y(t=0)=y_0 \]

5.3.1. méthode d’Euler#

recherche de la solution \(y=F(t)\) de l’EDO \(\frac{dy}{dt} = f(y(t),t) \)$

methode Euler

  • choix pas de discrétisation \(h=dt\)

  • calcul d’une solution approchée aux instants \(t= 0, h, 2h, .. kh\)

  • notation \(t_k = k h\), solution approchée \(y_k \approx F(t_k)\)

  • calcul itératif de \(y_{k+1}\) en fonction de \(y_k\) par discrétisation de l’EDO

\[ \left(\frac{dy}{dt}\right)_{t_k} = f(y_k,t_k) \approx \frac{y_{k+1}-y_k}{h} \rightarrow y_{k+1} = y_{k} + hf(y_k,t_k)\]

5.3.2. algorithme d’Euler#

  1. données: fonction second membre f(y,t)

  2. parametres temps total T d’intégration et nbre de pas d’intégration n

  3. h = T/n calcul du pas d’intégration

  4. Y = tableau dimension n+1 solution approchée:

    Y[0] = y0 condition initiale t = 0 pour k de 1 a n Y[k] = Y[k-1] + h*f(Y[k_1],t) t = t + h fin boucle

5.3.3. méthode de Runge Kutta 2#

pour améliorer la précision de la solution approchée (ordre 1 avec Euler), on va utiliser une discrétisation plus précise de la dérivée entre \(t_k\) et \(t_k+h\), en calculant la valeur au milieu de l’intervalle à \(t_{k+1/2} = t_k + h/2\) à l’aide de la formule de RungeKutta 2 suivante:

\[ \left(\frac{dy}{dt}\right)_{t_{k+1/2}} = f(y_{k+1/2},t_{k+1/2}) \approx \frac{y_{k+1}-y_k}{h} \rightarrow y_{k+1} = y_{k} + hf(y_{k+1/2},t_{k+1/2})\]

dans laquelle la valeur inconnue \(y_{k+1/2}\) est calculée avec la méthode d’Euler

\[ y_{k+1/2} = y_{k} + \frac{h}{2}f(y_{k},t_{k})\]

5.3.4. algorithme de Runge Kutta 2#

la boucle d’itération de Runge Kutta 2 s’écrit

    Y[0] = y0  condition initiale
    t = 0
    pour k de 1 a n 
       ym  = Y[k-1] + h/2*f(Y[k_1],t)
       Y[k]= Y[k-1] + h*f(ym,t+h/2)
       t = t + h
    fin boucle

5.4. FIN de la leçon#