Retour à la page Python

FORMAV Votre partenaire Formation http://formav.eu

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

Déclaration des bibliothèques à importer

In [33]:
# nécessaire pour utiliser matplotlib
%matplotlib inline
In [34]:

#Programme créé par Martine Arrou-Vignod en Août 2015

from math import * 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.axes as ax
from matplotlib.pyplot import *

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

Définition des variables

In [36]:
###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 [37]:
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])
    pprint(solutionci.expand(basic=true))
    lx = np.linspace(-4,4,100)
    #les lignes ci-dessous ralentissent l'exécution du programme et peuvent être supprimées
    #leur but est d'avoir la même échelle pour la solution générale sans condition initizle
    #et pour la solution avec conditions initiales
    yabs=[nsimplify(solutionci.rhs.subs(x,x1).evalf()) for x1 in lx]
    ym=min(yabs)
    ymm=max(yabs)
    deltay=round(ymm-ym)
    my=round(ym)-0.1*deltay
    mmy=round(ymm)+0.1*deltay
    plt.axis([-4,4,my,mmy])
    #fin lignes pouvant être supprimées 
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Quelques solutions sans conditions initiales')
    for k in range(-20,20):
        solutionk=solution.subs("C1",k).expand(basic=True)
        plt.plot(lx, [solutionk.rhs.subs(x,x1) for x1 in lx])
    plt.show()
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('Solution de l\'équation différentielle' )
    plt.plot(lx, [solutionci.rhs.subs(x,x1) for x1 in lx],label='Solution avec conditions initiales')
    plt.legend()
    plt.show()
    return solutionci.expand(basic=True)

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

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

linun(1,1,0,1,0)
Equation différentielle
   2          d       
- x  + y(x) + ──(y(x))
              dx      
Solution générale équation différentielle sans Conditions Initailes
           -x    2          
y(x) = C₁⋅ℯ   + x  - 2⋅x + 2
        2              -x
y(x) = x  - 2⋅x + 2 - ℯ  
Out[38]:
y(x)=x22x+2ex

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

In [39]:
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
                           -x 
                           ───
        2                   3 
y(x) = x  - 6⋅x + 18 - 17⋅ℯ   
Out[39]:
y(x)=x26x+1817ex3

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

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


linun(3,1,0,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 
                                    -x 
                                    ───
        2  x        x      x         3 
       x ⋅ℯ    3⋅x⋅ℯ    9⋅ℯ    105⋅ℯ   
y(x) = ───── - ────── + ──── - ────────
         4       8       32       32   
Out[40]:
y(x)=x2ex43x8ex+9ex3210532ex3

Exemple n°4 y(x)+y(x)=sin(x)y(1)=1

In [42]:
def secondmembre(x):
    return sin(x)


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

Dérivée
      -x   sin(x)   cos(x)
- C₁⋅ℯ   + ────── + ──────
             2        2   
                                   ___    -x    ⎛π    ⎞
                                 ╲╱ 2 ⋅ℯ⋅ℯ  ⋅sin⎜─ + 1⎟
       sin(x)   cos(x)      -x                  ⎝4    ⎠
y(x) = ────── - ────── - ℯ⋅ℯ   + ──────────────────────
         2        2                        2           
Out[42]:
y(x)=12sin(x)12cos(x)eex+2e2exsin(π4+1)
Pour toute question envoyer un mail à Martine Arrou-Vignod
FORMAV Votre partenaire formation