
25/03/2019
4
I. Les équations scalaires d’ordre 1
5) La fonction odeint
Le module scipy.integrate fournit la fonction odeint qui est un ”mix” de
Runge Kutta d’ordre 4 avec des méthodes à pas adaptatif. La fonction odeint
permet de résoudre les équations différentielles du premier ordre et du
deuxième ordre.
Syntaxe et utilisation
from scipy.integrate import odeint
Ys=odeint(f,CondInit,t)
f pointe sur la fonction CONNUE f dans y’(t)=f(y(t),t). Attention : le premier
argument de f est la fonction vectorielle inconnue y.
CondInit pointe sur le vecteur des conditions initiales.
y(t0)= [y1(t0), y2(t0), ....yn(t0)]
t pointe sur les points définissant le découpage de l’intervalle de résolution
I = [t0 ; t0 + T]
La solution Ys contient les valeurs des solutions approchées sur les différents
points indiques de I
19
Les équations scalaires d’ordre 1
La fonction o deint
I. Les équations scalaires d’ordre 1
5) La fonction odeint
Exemple 1 d’utilisation de la fonction odeint. Considérons l’équation
différentielle du premier ordre
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as pl
def F(y,t) :
return y
t= np.linspace(0, 5, 50)
y= odeint(F, 1, t)
pl.plot(t,y)
pl.show()
20
II. Les équations différentielles d’ordre 2
1. Représentation matricielle
21
II. Les équations différentielles d’ordre 2
2. La méthode d’Euler
22
L’objectif est de résoudre l’équation différentielle du second ordre:
def F(Y,t) :
return np.array([Y[1],f(Y[0],Y[1],t)])
def Euler2(F,a,b,Y0,n) :
h=(b-a)/n
t=np.linspace(a,b,n+1)
SY=np.array([[0.0,0.0] for i in range(n+1)])
SY[0]=Y0
for i in range(1,n+1) :
SY[i]=SY[i-1]+ h*F(SY[i-1],t[i-1])
return SY
y’’ =f(y,y’,t)
Y= [y(t) ,y’(t)]
Y’=F(Y , t) = [y’(t) , f( y, y’,t) ]=[Y[1],f(Y[0],Y[1],t)]
II. Les équations différentielles d’ordre 2
2. La méthode d’Euler
23
Exemple Considérons l’équation différentielle du second
ordre
x’’ =f(x,x’,t)
X= [x(t) ,x’(t)]
X’ =F(X(t),t)
X(t0)= [x(t0) ,x’(t0)]
F(X , t) = [x’(t) , f( x, x’,t) ]=[X[1],0.5*(1-X[0]**2)*X[1]-X[0]]
II. Les équations différentielles d’ordre 2
2. La méthode d’Euler
24
def F(Y,t) :
return np.array([Y[1],0.5*(1-Y[0]*Y[0])*Y[1]-Y[0]])
def Euler2(F,a,b,Y0,n) :
h=(b-a)/n
t=np.linspace(a,b,n+1)
SY=np.array([[0.0,0.0] for i in range(n+1)])
SY[0]=Y0
for i in range(1,n+1) :
SY[i]=SY[i-1]+ h*F(SY[i-1],t[i-1])
return SY
t=np.linspace(0,100,1000)
Y0=[0,0.1]
y= Euler2(F,0,100,Y0,999)
pl.plot(t,y)