Résolution d'équations différentielles linéaires à coefficents constants

Déclaration des bibliothèques à importer

In [103]:
# -*- coding: utf-8 -*-
#Résoudre des équations différentielles linéaires à coefficients constants
#Programme créé par Martine Arrou-Vignod en Août 2015

from math import * 
#pour faire du calcul formel
from sympy import *
In [104]:
#Pour pouvoir utilser mathjax pour écrire des formules 
init_printing(use_latex='mathjax')

Définition des variables

In [105]:
###Défintion des variables utiles dans les calculs
x,y=symbols("x y ")

Equations différentielles du premier ordre

définition de la fonction

linun(a,b,xd0,yd0,ordre0)

a,b coefficients de l'équation diférentielle

Conditions initiales (ordre0=0 y(xd0)=yd0 ) ( ordre0=1 y'(xd0)=yd0)

le second membre est défini dans la fonction : secondmembre(x)

In [106]:
def linun(a,b,xd0,yd0,ordre):
    #ordre 0 on donne yd0=y(xd0)
    #ordre 1 on donne yd0=y'(xd0)
    f=Function('y')
    fonction=a*f(x).diff(x)+b*f(x)-secondmembre(x)
    print('Equation différentielle')
    pprint(fonction)
    print('Solution générale équation différentielle sans Conditions Initailes')
    solution=dsolve(fonction)
    pprint(solution.expand(basic=True))
    x0=xd0
    y0=yd0
    #pprint(solution)
    if ordre==0 :
        sol1=solution.rhs.subs(x,xd0)-yd0
    if ordre==1 :
        solutiond=solution.rhs.diff(x).expand(basic=True)
        print('\nDérivée' )
        pprint(solutiond)
        sol1=solutiond.subs(x,xd0)-yd0
    S=solve((sol1))
    solutionci=solution.subs("C1",S[0]).expand(basic=True)
    return solutionci

Exemple n°1 3y(x)+y(x)=x2y(0)=1

In [107]:
def secondmembre(x):
    return x**2

linun(3,1,0,1,0)
Equation différentielle
   2            d       
- x  + y(x) + 3⋅──(y(x))
                dx      
Solution générale équation différentielle sans Conditions Initailes
           -x                 
           ───                
            3     2           
y(x) = C₁⋅ℯ    + x  - 6⋅x + 18
Out[107]:
y(x)=x26x+1817ex3

Exemple n°2 3y(x)+y(x)=x2exy(1)=1

In [108]:
def secondmembre(x):
    return x**2*exp(x)


linun(3,1,1,1,1)
Equation différentielle
   2  x            d       
- x ⋅ℯ  + y(x) + 3⋅──(y(x))
                   dx      
Solution générale équation différentielle sans Conditions Initailes
           -x                         
           ───    2  x        x      x
            3    x ⋅ℯ    3⋅x⋅ℯ    9⋅ℯ 
y(x) = C₁⋅ℯ    + ───── - ────── + ────
                   4       8       32 

Dérivée
      -x                       
      ───                      
       3     2  x      x      x
  C₁⋅ℯ      x ⋅ℯ    x⋅ℯ    3⋅ℯ 
- ─────── + ───── + ──── - ────
     3        4      8      32 
Out[108]:
y(x)=x2ex43x8ex+9ex323e13ex3+27e4332ex3

Equations différentielles linéaires du second ordre à coefficients constants

défintion de la fonction

lindeux(a,b,c,xd0,yd0,ordre0,xd1,yd1,ordre1)

a,b,c coefficients de l'équation diférentielle

Conditions initiales ( ordre0=0 y(xd0)=yd0 , ordre0=1 y'(xd0)=yd0 )

(ordre1=0 y(xd1)=yd1, ordre1=1 y'(xd1)=yd1)

le second membre est défini dans la fonction : secondmembre(x)

In [109]:
def lindeux(a,b,c,xd0,yd0,ordre0,xd1,yd1,ordre1):
    #ordre 0 on donne yd0=y(xd0)
    #ordre 1 on donne yd0=y'(xd0)
    f=Function('y')
    fonction=a*f(x).diff(x,x)+b*f(x).diff(x)+c*f(x)-secondmembre(x)
    print('Equation différentielle')
    pprint(fonction)
    print('Solution générale équation différentielle sans Conditions Initiales')
    solution=dsolve(fonction)
    pprint(solution.expand(basic=True))
    x0=xd0
    y0=yd0
    #pprint(solution)
    if ordre0==0 :
        sol0=solution.rhs.subs(x,xd0)-yd0
    if ordre0==1 :
        solutiond=solution.rhs.diff(x).expand(basic=True)
        print('\n Dérivée')
        pprint(solutiond)
        sol0=solutiond.subs(x,xd0)-yd0
    if ordre1==0 :
        sol1=solution.rhs.subs(x,xd1)-yd1
    if ordre1==1 :
        if ordre0==0:
            solutiond=solution.rhs.diff(x).expand(basic=True)
            print('Dérivée' )
            pprint(solutiond)
        sol1=solutiond.subs(x,xd1)-yd1
    S=solve((sol1,sol0))
    solutionci=solution.subs(S).expand(basic=True)
    return solutionci

Exemple n°3 y′′(x)+2y(x)+y=x2y(0)=1y(1)=2

In [110]:
def secondmembre(x):
    return x**2
lindeux(1,2,1,0,1,1,1,2,0)
Equation différentielle
                             2      
   2            d           d       
- x  + y(x) + 2⋅──(y(x)) + ───(y(x))
                dx           2      
                           dx       
Solution générale équation différentielle sans Conditions Initiales
           -x         -x    2          
y(x) = C₁⋅ℯ   + C₂⋅x⋅ℯ   + x  - 4⋅x + 6

 Dérivée
      -x         -x       -x          
- C₁⋅ℯ   - C₂⋅x⋅ℯ   + C₂⋅ℯ   + 2⋅x - 4
Out[110]:
y(x)=x24xex2ex+5x2ex+652exe2ex

Exemple n°4 y′′(x)+2y(x)+y=ex+4y(1)=1y(0)=0

In [111]:
def secondmembre(x):
    return exp(x)+4

lindeux(1,2,1,1,1,1,0,0,1)
Equation différentielle
                           2          
        x     d           d           
y(x) - ℯ  + 2⋅──(y(x)) + ───(y(x)) - 4
              dx           2          
                         dx           
Solution générale équation différentielle sans Conditions Initiales
                            x    
           -x         -x   ℯ     
y(x) = C₁⋅ℯ   + C₂⋅x⋅ℯ   + ── + 4
                           4     

 Dérivée
                                x
      -x         -x       -x   ℯ 
- C₁⋅ℯ   - C₂⋅x⋅ℯ   + C₂⋅ℯ   + ──
                               4 
Out[111]:
y(x)=exexx4ex+xe24ex+ex4+4eex+e24ex

Exemple n°5 y′′(x)+y(x)=exy(0)=0y(0)=2

In [112]:
def secondmembre(x):
    return exp(x)

lindeux(1,0,1,0,0,1,0,2,0)
Equation différentielle
              2      
        x    d       
y(x) - ℯ  + ───(y(x))
              2      
            dx       
Solution générale équation différentielle sans Conditions Initiales
                                x
                               ℯ 
y(x) = C₁⋅sin(x) + C₂⋅cos(x) + ──
                               2 

 Dérivée
                         x
                        ℯ 
C₁⋅cos(x) - C₂⋅sin(x) + ──
                        2 
Out[112]:
y(x)=ex212sin(x)+32cos(x)
Pour toute question envoyer un mail à Martine Arrou-Vignod
FORMAV Votre partenaire formation