Cours Info - 14 - Résolution numérique d`une équation différentielle

Transcription

Cours Info - 14 - Résolution numérique d`une équation différentielle
Cours Info - 14
Résolution numérique d’une équation différentielle ordinaire
D.Malka
MPSI 2015-2016
D.Malka
Cours Info - 14
MPSI 2015-2016
1 / 29
Sommaire
Sommaire
1
Equations différentielles ordinaires (EOD)
2
Résolution numérique approchée
3
Intégration entre deux bornes
D.Malka
Cours Info - 14
MPSI 2015-2016
2 / 29
Equations différentielles ordinaires (EOD)
Sommaire
1
Equations différentielles ordinaires (EOD)
2
Résolution numérique approchée
3
Intégration entre deux bornes
D.Malka
Cours Info - 14
MPSI 2015-2016
3 / 29
Equations différentielles ordinaires (EOD)
Exemples d’équations différentielles
Equations différentielles
Equations différentielles ordinaires (EOD)
y 0 = ay
y0 =
y
a.t + y
x 0 = ax − bxy
y 0 = cy + dyx
Forme générale (pour une fonction dépend d’une seule variable t) :
D.Malka
y 0 = f (y (t ), t )
y (a ) = y 0
Cours Info - 14
MPSI 2015-2016
4 / 29
Equations différentielles ordinaires (EOD)
Existence de solutions d’une équation différentielle
Existence de solutions
Existence de solutions
La majorité des équations différentielles n’admet pas de solution analytique.
Mais des preuves non constructives peuvent assurer qu’elles admettent une solution.
Exemple : le théorème de Cauchy-Lipschitz.
Résolution approchée
On détermine alors la solution de façon approchée par des algorithmes en discrétisant
l’équation.
La fonction solution de l’équation différentielle est alors une liste de valeurs discrètes
prises par la fonction pour différents antécédents.
Il faut s’assurer de la stabilité du problème ainsi que de la convergence de la stabilité
numérique de l’algorithme. Il faut contrôler et estimer l’erreur commise par rapport à la
solution exacte.
D.Malka
Cours Info - 14
MPSI 2015-2016
5 / 29
Résolution numérique approchée
Sommaire
1
Equations différentielles ordinaires (EOD)
2
Résolution numérique approchée
3
Intégration entre deux bornes
D.Malka
Cours Info - 14
MPSI 2015-2016
6 / 29
Résolution numérique approchée
Intérêt
Intérêt
Intérêt de la résolution numérique d’une équation :
I
Résoudre des équations n’ayant pas de solution analytique.
I
Observer facilement l’influence d’un paramètre sur la solution d’une équation,
éventuellement analytique.
D.Malka
Cours Info - 14
MPSI 2015-2016
7 / 29
Résolution numérique approchée
Principe de la méthode d’Euler
Méthode d’Euler explicite
I
On cherche à résoudre sur [a, b] l’équation de la forme :
y 0 = f (y (t ), t ) avec y (a) = y0
I
Si y (t ) est de classe C1 alors, connaissant y (ti ), on peut évaluer de façon
approchée, y (ti +1 ) par son développement de Taylor à l’ordre 1. Schéma
numérique explicite :
y (ti +1 ) = y (ti ) + y 0 (ti )(ti +1 − ti )
I
Soit en posant h = ti +1 − ti et avec y 0 (ti ) = f (y (ti ), ti ) :
y (ti +1 ) = y (ti ) + f (y (ti ), ti ).h
Connaissant y (a), on évalue par itérations successives les valeurs approchées de la
fonction y (t ) :
[y (a), y (a + h), y (a + 2h), y (a + 3h) . . . y (b − h), y (b)]
D.Malka
Cours Info - 14
MPSI 2015-2016
8 / 29
Résolution numérique approchée
Principe de la méthode d’Euler
Interprétation géométrique
yi+f(y(ti),ti).h
f(y(ti),ti)
ε(h)
yi+1
Cy
yi
h
ti
D.Malka
ti+1
Cours Info - 14
MPSI 2015-2016
9 / 29
Résolution numérique approchée
Principe de la méthode d’Euler
Interprétation géométrique
3.0
Interpretation_geometrique de la methode d'Euler
"vraie" solution y=exp(t)
Methode d'Euler, h=1/3
2.5
y
2.0
1.5
1.0
0.5
0.0
0.2
0.4
t
0.6
0.8
1.0
La courbe de la fonction est approchée par les tangentes successives à la courbe.
D.Malka
Cours Info - 14
MPSI 2015-2016
10 / 29
Résolution numérique approchée
Implémentation en Python
Implémentation en Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def Euler(f,y0,a,b,n):
’’’
Integre l’equation y’(t)=f(y(t),t) avec y(a)=y0 selon le schema
explicite d’Euler
t,y : list of floats
f : function
y0,a,b :floats. [a,b] : intervalle de resolition
n : int, nombre de points. Pas de discretisation : h=(b-a)/(n-1)
’’’
h=(b-a)/(n-1)
t=[0]*n
for i in range(0,n):
t[i]=a+i*h
y=[0]*n;y[0]=y0
for i in range(0,n-1):
y[i+1]=y[i]+f(y[i],t[i])*h
return t,y
D.Malka
Cours Info - 14
MPSI 2015-2016
11 / 29
Résolution numérique approchée
Implémentation en Python
Erreur
3.0
Interpretation_geometrique de la methode d'Euler
"vraie" solution y=exp(t)
Methode d'Euler, h=1/3
2.5
y
2.0
1.5
1.0
0.5
0.0
I
I
0.2
0.4
t
0.6
0.8
1.0
1
f ”(xi )h2 .
2
Erreur globale E qui provient de l’accumulation des erreurs des itérations
précédentes.
Erreur locale ei ∼
D.Malka
Cours Info - 14
MPSI 2015-2016
12 / 29
Résolution numérique approchée
Stabilité
Influence du pas discrétisation
1.0
Fonction exp(-t) calculee par la methode d'Euler avec h=0.5
160
exacte
calculee
Fonction exp(t) calculee par la methode d'Euler avec h=0.5
exacte
calculee
140
0.8
120
100
0.6
80
0.4
60
40
0.2
20
0.0
0
1
2
3
4
5
0
0
1
2
3
4
5
I
toujours instable si l’EOD est instable lui-même (y 0 − y = 0) i.e l’erreur globale
diverge.
I
stable si l’EOD stable et si h suffisamment petit (y 0 + y = 0) i.e l’erreur globale est
bornée.
D.Malka
Cours Info - 14
MPSI 2015-2016
13 / 29
Résolution numérique approchée
Influence du pas de discrétisation
Influence du pas discrétisation
160
Fonction exp(t) calculee par la methode d'Euler avec h=0.5
160
exacte
calculee
140
exacte
calculee
140
120
120
100
100
80
80
60
60
40
40
20
0
0
Fonction exp(t) calculee par la methode d'Euler avec h=0.05
20
1
2
3
4
5
0
0
1
2
3
4
5
I
Plus h est petit, plus la solution approchée sera consistante . . .
I
I
. . . jusqu’à un certain point. En deçà les erreurs numériques explosent !
b−a
Complexité de la méthode d’Euler : O (n) avec n =
. Plus h est petit, plus
h
le temps de calcul est élevé.
I
Il faut trouver un compromis.
D.Malka
Cours Info - 14
MPSI 2015-2016
14 / 29
Résolution numérique approchée
Influence du pas de discrétisation
Consistance de la méthode d’Euler
Erreur de consistance
100
erreur relative e(h) sur exp(1)
10-1
10-2
10-3
10-4
10-5
10-6
10-7
10-8 -7
10
10-6
10-5
10-4
pas h
10-3
10-2
10-1
100
Erreur sur relative sur e par calcul itératif pour différents pas h avec la méthode
d’Euler : pour h petit, log(e) = α log(h) + b soit e = k .hα .
D.Malka
Cours Info - 14
MPSI 2015-2016
15 / 29
Résolution numérique approchée
Autres méthodes en bref
Autres méthodes en bref
Quelques autres méthodes (utilisée dans les fonctions prédéfinies de scipy).
I
Idée : pousser le développement de Taylor plus loin.
Méthode d’Heun : ordre 2
Méthode de Runge-Kutta : ordre 4
I
Méthode de pas adaptatif
D.Malka
Cours Info - 14
MPSI 2015-2016
16 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Fonction prédéfinies en Python
Module integrate de la bibliotheque scipy :
import scipy.integrate as integ
Fonction odeint.
1
2
3
4
5
import scipy.integrate as integ
integ.odeint(f,init,t)
#f fonction telle que y’=f(y,t)
# t=[a...b], instants t auxquels y(t) est calculee
#y(a)=init
D.Malka
Cours Info - 14
MPSI 2015-2016
17 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Charge d’un condensateur
dU
dt
1
2
3
4
+
u
τ
=
E
τ
C=1e-6
R=1e3
tau=R*C
E=6
5
6
7
8
def f(u,t):
rhs=-u/tau+E/tau
return rhs
9
10
11
12
u0=0
t=np.linspace(0,5*tau,1000)
u=integ.odeint(f,u0,t)
D.Malka
Cours Info - 14
MPSI 2015-2016
18 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Charge d’un condensateur
6
5
u(V)
4
3
2
1
0
0.000
D.Malka
0.001
0.002
t(s)
0.003
Cours Info - 14
0.004
0.005
MPSI 2015-2016
19 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Système non linéaire
x 0 = cos(t )y
y 0 = sin(t )x
1
2
3
def f(sol,t):
x=sol[0]
y=sol[1]
4
rhs_x=np.cos(t)*y
rhs_y=np.sin(t)*x
return [rhs_x,rhs_y]
5
6
7
8
9
init=[1,1]
10
11
12
t=np.linspace(0,20,1000000)
sol=integ.odeint(f,init,t)
13
14
print(sol)
D.Malka
Cours Info - 14
MPSI 2015-2016
20 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Système non linéaire
4000
x(t)
y(t)
3000
2000
1000
0
1000
2000
0
D.Malka
5
10
t
Cours Info - 14
15
20
MPSI 2015-2016
21 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Oscillateur de Van der Pol
ẍ = µ(1 − x 2 )ẋ − x
1
2
3
4
5
6
7
8
9
10
11
12
def f(sol,t):
x=sol[0]
xp=sol[1]
rhs_x=xp
rhs_xp=mu*(1-x**2)*xp-x
return [rhs_x,rhs_xp]
#RESOLUTION
init=[0,0.1]
t=np.linspace(0,100,10000)
sol=integ.odeint(f,init,t)
x=sol[:,0]
xp=sol[:,1]
D.Malka
Cours Info - 14
MPSI 2015-2016
22 / 29
Résolution numérique approchée
Fonction prédéfinies en Python
Oscillateur de Van der Pol
Cycle limite de l'oscilllateur de van der Pol
3
2
dx/dt
1
0
1
2
3
D.Malka
3
2
1
0
x
Cours Info - 14
1
2
3
MPSI 2015-2016
23 / 29
Intégration entre deux bornes
Sommaire
1
Equations différentielles ordinaires (EOD)
2
Résolution numérique approchée
3
Intégration entre deux bornes
D.Malka
Cours Info - 14
MPSI 2015-2016
24 / 29
Intégration entre deux bornes
Intégration entre deux bornes
Méthodes des rectangles
f(x)
Aire Ai=f(xi)(xi+1-xi)
f(xi)
xi
D.Malka
xi+1
Cours Info - 14
x
MPSI 2015-2016
25 / 29
Intégration entre deux bornes
Intégration entre deux bornes
Méthodes des rectangles
1
2
3
4
5
6
7
8
9
def rect_integ(f,a,b,n):#ordre 0
"""
Methode des rectangles
"""
h=(b-a)/n
I=0
for i in range(n):
I=I+f(a+i*h)*h
return I
D.Malka
Cours Info - 14
MPSI 2015-2016
26 / 29
Intégration entre deux bornes
Intégration entre deux bornes
Méthodes des trapèzes
f(x)
Aire Ai=f(xi)(xi+1-xi)
+1/2*(f(xi+1)-f(xi))(xi+1-xi)
f(xi+1)
f(xi)
xi
D.Malka
Cours Info - 14
xi+1
x
MPSI 2015-2016
27 / 29
Intégration entre deux bornes
Intégration entre deux bornes
Méthodes des trapèzes
1
2
3
4
5
6
7
8
9
def trap_integ(f,a,b,n):#ordre 1
"""
Methode des trapezes
"""
h=(b-a)/n
I=0
for i in range(n):
I=I+f(a+i*h)*h+1/2*(f(a+(i+1)*h)-f(a+i*h))*h
return I
D.Malka
Cours Info - 14
MPSI 2015-2016
28 / 29
Intégration entre deux bornes
Intégration entre deux bornes
Fonction prédéfinie
Fonction quad(f,a,b)
1
quad(lambda x:x**2,0,1)
Comparatif : quad >> trapeze >> rectangle
D.Malka
Cours Info - 14
MPSI 2015-2016
29 / 29