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