Équations différentielles : desolve deSolve dsolve

### 6.63.1 Équations différentielles : `desolve deSolve dsolve`

`desolve` (ou `deSolve`) permet de résoudre :

- les équations différentielles linéaires à coefficients constants du premier ou du deuxième ordre,
- les équations différentielles linéaires du premier ordre,
- les équations différentielles du premier ordre incomplète en y,
- les équations différentielles du premier ordre incomplète en x,
- les équations différentielles du premier ordre à variables séparées,
- les équations différentielles du premier ordre homogènes (y′=F(y/x)),
- les équations différentielles du premier ordre ayant un facteur intégrant,
- les équations différentielles de Bernoulli (a(x)y′+b(x)y=c(x)yn),
- les équations différentielles de Clairaut (y=x*y′+f(y′)).
- les équations différentielles de Lagrange (y=a(y′)x+b(y′)).
- les systèmes différentiels linéaires à coefficients constants ([y′=[[1,2],[2,1]]*y+[x,x+1],y(0)=[1,2]])).

Les paramètres de `desolve`:

- quand l’équation différentielle est du premier ordre, que la variable est x et que l’inconnue est y, les paramètres sont :
  l’équation différentielle, par exemple :
  `desolve(y’+x*y=0)`
  ou
  l’équation différentielle suivie de la liste [x0,y0] qui donne comme condition initiale y(x0)=y0, par exemple
  `desolve(y’+x*y=0,[0,1])`
  ou
  la liste formée par l’équation différentielle et de la relation y(x0)=y0 qui donne la condition initiale et comme 2nd argument l’inconnue y, par exemple
  `desolve([y’+x*y=0,y(0)=1],y)`
  `desolve([y’’+2*y’+y,y(0)=1,y’(0)=0],y])`
- quand la variable est x et l’inconnue n’est pas y :
  les paramètres sont : l’équation différentielle (ou la liste formée par l’équation différentielle et les conditions initiales) et l’inconnue y (ou z ou ..), par exemple

      desolve(z'+x*z=0,z)
      desolve([y'+x*y=0,y(0)=1]);
      desolve([y'+x*y=0,y(0)=1],y)
      desolve([z'+x*z=0,z(0)=1],z)
      desolve([y''+2*y'+y,y(0)=1,y'(0)=0]);
      desolve([y''+2*y'+y,y(0)=1,y'(0)=0],y)
      desolve([z''+2*z'+z,z(0)=1,z'(0)=0],z)

  Dans l’équation différentielle y s’écrit y et y′ s’écrit y′ et y" s’écrit y″ car on dérive par rapport à la variable x. Par exemple : `desolve(y’’+2*y’+y,y)` et `desolve([y’’+2*y’+y,y(0)=1,y’(0)=0],y)`.
- quand la variable n’est pas x (par exemple t.) et l’inconnue est ou n’est pas y:
  les paramètres sont : l’équation différentielle (ou la liste formée par l’équation différentielle et les conditions initiales), la variable t et l’inconnue z ou l’inconnue z(t) (la variable est alors t et l’inconnue est z).
  Dans l’équation différentielle, y s’écrit y et y′ s’écrit y′ et y" s’écrit y″ car on dérive par rapport à la variable que l’on a spécifiée ; on peut aussi écrire y sous la forme y(t) et y ′ sous la forme `diff(y(t),t)`, y′′ sous la forme `diff(y(t),t$2)` si la la variable que l’on a spécifiée est t. Mais l’écriture est moins conviviale !
  Par exemple :
  `desolve(diff(y(t),t$2)+2*diff(y(t),t)+y(t),y(t))`; ou
  `desolve(diff(y(t),t$2)+2*diff(y(t),t)+y(t),t,y)`; ou
  `desolve(y’’+2y’+y,t,y)`; ou
  `desolve(y’’+2y’+y,y(t))`
  et
  `desolve([y’’+2*y’+y,y(0)=1,y’(0)=0],t,y)` ou
  `desolve([y’’+2*y’+y,y(0)=1,y’(0)=0],y(t))` ou
  `desolve([z’’+2*z’+z,z(0)=1,z’(0)=0],u,z)` ou
  `desolve([z’’+2*z’+z,z(0)=1,z’(0)=0],z(u))`.
  Lorsqu’il n’y a pas de conditions initiales (ou une seule condition initiale pour une équation du second ordre), `desolve` renvoie la solution écrite avec des constantes d’intégration : `c_0, c_1` où `y(0)=c_0` et `y’(0)=c_1` ou renvoie une liste des solutions.
- quand on a un système différentiel linéaire à coefficients constants les paramètres sont :
  - si la variable est x et que l’inconnue est y, les paramètres sont le système différentiel donné sous forme matricielle, par exemple :
    `desolve(y’=[[1,2],[2,1]]*y+[x,x+1])`
    ou
    la liste formée par le système différentiel donné sous forme matricielle et de la relation qui donne la condition initiale (par y(x0)=[a0,a1]).
    par exemple :
    `desolve([y’=[[1,2],[2,1]]*y+[x,x+1],y(0)=[1,2]])`
  - si la variable n’est pas x (par exemple t) es paramètres sont le système différentiel, la variable t et l’inconnue z ou l’inconnue z(t) par exemple :
    `desolve(z’=[[1,2],[2,1]]*z+[t,t+1],t,z)` ou
    `desolve(z’=[[1,2],[2,1]]*z+[t,t+1],z(t))`
    et
    `desolve([z’=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)` ou
    `desolve([z’=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))`
- Si vous avez trouvé une solution particulière vous pouvez la donner en la mettant comme valeur de y (ou de z) :
  Par exemple si f0(x) est une solution on écrira ;
  `desolve(y’+y=2*exp(x),y=exp(x))`
  ou
  `desolve(z’+z=2*exp(x),z=exp(x))`

Exemples

- Exemples de résolution d’une équation différentielle linéaire à coefficients constants du deuxième ordre.
  1. Résoudre :

     y″+y=cos(x)

     On tape (en tapant deux fois prime pour `y’’`):
     `desolve(y’’+y=cos(x),y)`
     ou encore :
     `desolve(diff(diff(y))+y=cos(x),y)`
     On trouve :
     `c_0*cos(x)+(x+2*c_1)*sin(x)/2`
     `c_0, c_1` sont les constantes d’intégration : `y(0)=c_0` et `y’(0)=c_1`.
     ou bien si la variable n’est pas `x` mais `t`, on tape :
     `desolve(derive(derive(y(t),t),t)+y(t)=cos(t),t,y)`
     ou encore
     `desolve(derive(derive(y(t),t),t)+y(t)=cos(t),[t,y])`
     On trouve alors :
     `c_0*cos(t)+(t+2*c_1)/2*sin(t)`
     `c_0, c_1` sont les constantes d’intégration : `y(0)=c_0` et `y’(0)=c_1`.
  2. Résoudre :

     y″+y=cos(x) y(0)=1

     On écrit, si veut les solutions vérifiant y(0)=1 :
     `desolve([y’’+y=cos(x),y(0)=1],y)`
     On obtient
     `[cos(x)+(x+2*c_1)/2*sin(x)]`
     les composantes de ce vecteur sont solutions (ici on a une seule composante car on obtient une seule solution dépendant de la constante `c_1`).
  3. Résoudre :

     y″+y=cos(x) (y(0))2=1

     On veut les solutions vérifiant (y(0))2=1, on tape alors :
     `desolve([y’’+y=cos(x),y(0)```^```2=1],y)`
     On obtient
     `[-cos(x)+(x+2*c_1)/2*sin(x), cos(x)+(x+2*c_1)/2*sin(x)]`
     chaque composantes de cette liste est une solution, on a donc deux solutions dépendant de la constante `c_1` qui correspondent à y(0)=1 et à y(0)=−1.
  4. Résoudre :

     y″+y=cos(x) (y(0))2=1 y′(0)=1

     On veut les solutions vérifiant (y(0))2=1 et y′(0)=1, on tape alors :
     `desolve([y’’+y=cos(x),y(0)```^```2=1,y’(0)=1],y)`
     On obtient :
     `[-cos(x)+(x+2)/2*sin(x),cos(x)+(x+2)/2*sin(x)]`
     chaque composante de cette liste est une solution.On a donc deux solutions.
  5. Résoudre :

     y″+2y′+y=0

     On tape alors :
     `desolve(y’’+2*y’+y=0,y)`
     On obtient les solutions dépendant de 2 constantes d’intégration `c_0` et `c_1`:
     `(x*c_0+x*c_1+c_0)*exp(-x)`
  6. Résoudre :

     y″−6y′+9y=xe3x

     On tape alors :
     `desolve(y’’-6*y’+9*y=x*exp(3*x),y)`
     On obtient :
     `(x```^```3+(-(18*x))*c_0+6*x*c_1+6*c_0)*1/6*exp(3*x)`
     la solution dépend de 2 constantes d’intégration `c_0` et `c_1`.
- Exemples de résolution d’une équation différentielle linéaire du premier ordre.
  1. Résoudre :

     xy′+y−3x2=0

     On tape alors :
     `desolve(x*y’+y-3*x```^```2,y)`
     Ou on tape :
     `desolve(x*y’+y-3*x```^```2)`
     On obtient :
     `(c_0+x```^```3)/x`
  2. Résoudre :

     y′+x*y=0, y(0)=1

     On tape alors :
     `desolve([y’+x*y=0, 0,1])`
     Ou on tape :
     `desolve([y’+x*y=0, y(0)=1],y)`
     Ou on tape :
     `desolve((y’+x*y=0) && (y(0)=1),[x,y])`
     Ou on tape :
     `desolve((y’+x*y=0) && (y(0)=1),x,y)`
     Ou on tape :
     `desolve((y’+x*y=0) && (y(0)=1),y)`
     On obtient :
     `[exp(-x```^```2)/2)]`
  3. Résoudre :

     x(x2−1)y′+2y=0

     On tape alors :
     `desolve(x*(x```^```2-1)*y’+2*y=0)`
     Ou on tape :
     `desolve(x*(x```^```2-1)*y’+2*y=0,y)`
     On obtient :
     `(c_0)/((x```^```2-1)/(x```^```2))`
  4. Résoudre :

     x(x2−1)y′+2y=x2

     On tape alors :
     `desolve(x*(x```^```2-1)*y’+2*y=x```^```2)`
     Ou on tape :
     `desolve(x*(x```^```2-1)*y’+2*y=x```^```2,y)`
     On obtient :
     `(c_0*x```^```2+x```^```2*ln(x))/(x```^```2-1)`
     Si la variable est t et non x, par exemple :

     t(t2−1)y′(t)+2y(t)=t2

     On tape :
     `desolve(t*(t```^```2-1)*diff(y(t),t)+2*y(t)=(t```^```2),y(t))`
     On obtient :
     `(c_0*t```^```2+t```^```2*ln(t))/(t```^```2-1)`
  5. Résoudre :

     x(x2−1)y′+2y=x2,y(2)=0

     On tape alors :
     `desolve(x*(x```^```2-1)*y’+2*y=x```^```2,[2,0])`
     Ou on tape :
     `desolve([x*(x```^```2-1)*y’+2*y=x```^```2,y(2)=0],y)`
     On obtient :
     `[(-ln(2)*x```^```2+x```^```2*ln(x))/(x```^```2-1)]`
  6. Résoudre :

     √ |
     1+x2
     | y′−x−y= | √ |
     1+x2

     On tape alors :
     `desolve(y’*sqrt(1+x```^```2)-x-y-sqrt(1+x```^```2))`
     Ou on tape :
     `desolve(y’*sqrt(1+x```^```2)-x-y-sqrt(1+x```^```2),y)`
     On obtient :
     `(-c_0+ln(sqrt(x```^```2+1)-x))/(x-sqrt(x```^```2+1))`
- Exemples de résolution d’une équation différentielle à variables séparées.
  1. Résoudre :

     y′=2 | √ |
     y

     On tape alors :
     `desolve(y’=2*sqrt(y))`
     Ou on tape :
     `desolve(y’=2*sqrt(y),y)`
     On obtient :
     `[x```^```2+-2*x*c_0+c_0```^```2]`
  2. Résoudre :

     xy′ln(x)−y(3ln(x)+1)=0

     On tape alors :
     `desolve(x*y’*ln(x)-(3*ln(x)+1)*y)`
     Ou on tape :
     `desolve(x*y’*ln(x)-(3*ln(x)+1)*y,y)`
     On obtient :
     `c_0*x```^```3*ln(x)`
- Exemples de résolution d’une équation différentielle de Bernoulli du premier ordre, de type a(x)y′+b(x)y=c(x)yn avec n=constante réelle.
  Ces équations se résolvent en divisant par yn, car on se ramène à une équation linéaire en u=1/yn−1.
  1. Résoudre :

     xy′+2y+xy2=0

     On tape alors :
     `desolve(x*y’+2*y+x*y```^```2)`
     Ou on tape :
     `desolve(x*y’+2*y+x*y```^```2,y)`
     On obtient :
     `[(-1/x+c_0))*x```^```2]`
  2. Résoudre :

     xy′−2y=xy3

     On tape alors :
     `desolve(x*y’-2*y-x*y```^```3)`
     Ou on tape :
     `desolve(x*y’-2*y-x*y```^```3,y)`
     On obtient :
     `[((-2*x```^```5/5+c_0)/x```^```4)```^```(1/-2), -((-2*x```^```5/5+c_0)/x```^```4)(1/-2)]`
  3. Résoudre :

     x2y′−2y=xe(4/x)y3

     On tape alors :
     `desolve(x```^```2*y’-2*y-x*exp(4/x)*y```^```3,y)`
     On obtient :
     `[((-2*ln(x)+c_0)*exp(4*/x))```^```(1/-2),`
     `-((-2*ln(x)+c_0)*exp(4/x))```^```(1/-2))]`
- Exemples de résolution d’une équation différentielle homogéne du premier ordre qui se résout en posant y=t*x.
  1. Résoudre :

     3x3y′=y(3x2−y2)

     On tape alors :
     `desolve(3*x```^```3*y’=((3*x```^```2-y```^```2)*y))`
     Ou on tape :
     `desolve(3*x```^```3*y’=((3*x```^```2-y```^```2)*y),y)`
     On obtient :
     `[0,pnt[c_0*exp((3/(2*‘ t‘```^```2)),‘ t‘*c_0*exp((3/(2*‘ t‘```^```2))]]`
     donc les solutions sont y=0 et la famille de courbes d’équation paramétrique x=c0exp(3/(2t2)), y=t*c0exp(3/(2t2)) (le paramètre est noté ‵ t‵ dans la réponse).
  2. Résoudre :

     xy′=y+ | √ |
     x2+y2

     On tape alors :
     `desolve(x*y’=y+sqrt(x```^```2+y```^```2))`
     Ou on tape :
     `desolve(x*y’=y+sqrt(x```^```2+y```^```2),y)`
     On obtient :
     `[(-i)*x,(i)*x,pnt[c_0/(sqrt(‘ t‘```^```2+1)-‘ t‘),(‘ t‘*c_0)/(sqrt(‘ t‘```^```2+1)-‘ t‘)]]`
     donc les solutions sont :

     y=ix,y=−ix

     et la famille de courbes d’équation paramétrique

     x=c0/( | √ |
     t2+1
     | −t), y=t*c0/( | √ |
     t2+1
     | −t)

     (le paramètre est noté ‵ t‵ dans la réponse.
- Exemples de résolution d’une équation différentielle du premier ordre ayant un facteur intégrant.
  1. Résoudre :

     yy′+x

     On tape alors :
     `desolve(y*y’+x)`
     Ou on tape :
     `desolve(y*y’+x,y)`
     On obtient :
     `[sqrt(-2*c_0-x```^```2),-(sqrt(-2*c_0-x```^```2))]`
     dans cet exemple, xdx+ydy est une différentielle totale, et le facteur intégrant est 1.
  2. Résoudre :

     2xyy′+x2−y2+a2=0

     On tape alors :
     `desolve(2*x*y*y’+x```^```2-y```^```2+a```^```2)`
     Ou on tape :
     `desolve(2*x*y*y’+x```^```2-y```^```2+a```^```2,y)`
     On obtient :
     `[sqrt(a```^```2-x```^```2-c_1*x),-(sqrt(a```^```2-x```^```2-c_1*x))]`
     dans cet exemple le facteur intégrant est 1/x2.
- Exemple de résolution d’une équation différentielle du premier ordre incomplète en x.
  Résoudre :

  (y+y′)4+y′+3y=0

  Ce genre d’équations n’est pas résoluble directement par `Xcas`, nous allons expliquer ce qu’il faut faire pour l’aider à résoudre de telles équations. On doit trouver pour résoudre F(y,y′)=0, une représentation paramétrique de F(u,v)=0, par exemple, u=f(t),v=g(t) puis, poser y=f(t) et dy/dx=y′=g(t).
  On a donc dy/dt=f′(t)=y′*dx/dt=g(t)*dx/dt.
  On trouve alors, comme solution la courbe d’équation paramétrique x(t), y(t)=f(t), où x(t) est obtenu en résolvant l’équation différentielle g(t)dx=f′(t)dt.
  Ici on peut poser y+y′=t ce qui donne :
  y=−t−8*t4 et y′=dy/dx=3*t+8*t4 et donc dy/dt=−1−32*t3 donc
  (3*t+8*t4)*dx=(−1−32*t3)dt.
  On tape alors :
  `desolve((3*t+8*t```^```4)*diff(x(t),t)=(-1-32*t```^```3),x(t))`
  On obtient :
  `(9*c_0 -11*ln(8*t```^```3+3)-ln(t```^```3))/9`
  on a donc comme solution la courbe d’équation :

  x(t)=−11*1/9*ln(8*t3+3)+1/−9*ln(t3)+c0, y(t)=−t−8*t4

- Exemples de résolution d’une équation différentielle de Clairaut du premier ordre, de type y=x*y′+f(y′) avec f continument dérivable ; c’est un cas particulier de l’équation différentielle de Lagrange, en hommage au mathḿaticien Alexis Clairaut.
  On pose dy/dx=y′=t et on remplace l’équation différentielle y=x*y′+f(y′) par le système paramétrique :
  y=x*t+f(t) et dy=tdx
  ce système est équivalent au système obtenu en éliminant dy :
  y=x*t+f(t) et (x+f′(t))dt=0
  car dy=tdx+xdt+f′(t)dt=tdx
  On a alors deux types de solutions :
  - celles qui vérifient y=x*t+f(t) et dt=0
    donc t=m=cste et y=mx+f(m)
    y=mx+f(m) est l’équation des droites Dm. Ces droites sont appelées les solutions générales de l’équation.
  - celles qui vérifient y=x*t+f(t) et x+f′(t)=0
    c’est à dire la courbe d’équation paramétrique :
    x=−f′(t) et y=−tf′(t)+f(t) cette solution est appelée solution singulière.
    La courbe représentative de cette solution est l’enveloppe de la famille des droites Dm.
    En effet si y=mx+f(m), l’enveloppe de ces droites est l’ensemble des points de coordonnées x,y qui vérifient :
    y=mx+f(m) et 0=x+f′(m) lorsque m∈ ℝ
    qui sont les 2 équations qui definissent la solution singulière/
  - Des solutions hybrides peuvent être obtenues par raccordement de ces différentes courbes solutions, d’autant plus simplement qu’il s’agit d’une famille de droites et de sa courbe enveloppe.
  Exemple
  1. Résoudre :

     xy′+y′3−y)=0

     On tape alors :
     `desolve(x*y’+y’```^```3-y,y)`
     On obtient :
     `[c_0*x+c_0```^```3,[-3*‘ t‘```^```2,-‘ t‘*3*‘ t‘```^```2+‘ t‘```^```3]]`
     On tape dans un niveau de géométrie 2d :
     `supposons(m=[-0.7,-5,5,0.1]);`
     `droite(y=m*x+m```^```3);`
     `plotparam(-3*t```^```2+i*(-2*t```^```3))`
     On obtient :
     en faisant bouger le curseur m on voit que les droites enveloppe la courbe d’équation paramétrique x=−3*t2,y=−2*t3
  2. Résoudre :

     y−xy′= | √ |
     a2+b2*y′2
     | =0

     On tape alors :
     `desolve(y-x*y’-sqrt(a```^```2+b```^```2*y’```^```2),y)`
     On obtient :
     `[c_0*x+sqrt(a```^```2+b```^```2*c_0```^```2), [-b```^```2*2*‘ t‘*(sqrt(a```^```2+b```^```2*‘ t‘```^```2))```^```-1/2,-‘ t‘*b```^```2*2*‘ t‘*(sqrt(a```^```2+b```^```2*‘ t‘```^```2))```^```-1/2+sqrt(a```^```2+b```^```2*‘ t‘```^```2)]]`
- Résoudre le système différentiel : u′(t)=u(t)+2v(t)+t
  v′(t)=2u(t)+v(t)+t+1
  Puis trouver les solutions de ce sytème qui vérifie u(0=1,v(0)=2 On tape :
  `desolve(y’=[[1,2],[2,1]]*y+[x,x+1])`
  On obtient
  `[[(9*exp(-x)+5*exp(3*x)+9*c_0*exp(-x)+9*c_0*exp(3*x)- 9*c_1*exp(-x)+9*c_1*exp(3*x)-6*x-14)/18, (-9*exp(-x)+5*exp(3*x)-9*c_0*exp(-x)+ 9*c_0*exp(3*x)+9*c_1*exp(-x)+9*c_1*exp(3*x)-6*x+4)/18]]`
  cela donne les expressions de u(x) et v(x).
  Ou on tape :
  `desolve(y’=[[1,2],[2,1]]*y+[t,t+1],t,y)`
  ou on tape :
  `desolve(z’=[[1,2],[2,1]]*z+[t,t+1],t,z)`
  ou on tape :
  `desolve(z’=[[1,2],[2,1]]*z+[t,t+1],z(t))`
  On obtient
  `[[(9*exp(-t)+5*exp(3*t)+9*c_0*exp(-t)+9*c_0*exp(3*t)- 9*c_1*exp(-t)+9*c_1*exp(3*t)-6*t-14)/18, (-9*exp(-t)+5*exp(3*t)-9*c_0*exp(-t)+ 9*c_0*exp(3*t)+9*c_1*exp(-t)+9*c_1*exp(3*t)-6*t+4)/18]]`
  cela donne les expressions de u(t) et v(t).
  Puis, on tape :
  `desolve([y’=[[1,2],[2,1]]*y+[x,x+1],y(0)=[1,2]])`
  On obtient
  `[[(16*exp(3*x)-3*x-7)/9,(16*exp(3*x)-3*x+2)/9]]`
  cela donne les expressions de u(x) et v(x) tels que u(0)=1 et v(0)=2.
  Ou on tape :
  `desolve([z’=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],t,z)`
  ou on tape :
  `desolve([z’=[[1,2],[2,1]]*z+[t,t+1],z(0)=[1,2]],z(t))`
  On obtient
  `[[(16*exp(3*t)-3*t-7)/9,(16*exp(3*t)-3*t+2)/9]]`
  cela donne les expressions de u(t) et v(t) tels que u(0)=1 et v(0)=2.