Résolution d équations différentielles avec Matlab Olivier Gauthé 1 Rappel sur les équations différentielles 1.1 Définition et généralités Une équation différentielle ordinaire (ODE, ordinary differential equation) est une équation reliant une fonction d une variable réelle et ses dérivées. Dans sa forme la plus générale, elle s écrit f(y, y, t) = 0 (1) où y est la fonction inconnue, y sa dérivée et t la variable réelle. Cette formulation est extrêmement générale et peut poser de grosses difficultés mathématiques. Dans tout ce qui suit, on se limitera aux équations différentielles ordinaires explicites, c est à dire de la forme y = f(y, t) (2) On ne s intéressera pas ici aux équations différentielles partielles et on dira simplement équation différentielle pour désigner une équation différentielle ordinaire. 1.2 Conditions initiales et théorème de Cauchy-Lipschitz Une équation différentielle admet généralement une infinité de solution, mais un problème physique, par exemple la chute d une pierre, n a qu une seule solution : celle qu on mesure. Pour trouver la solution physique du problème considéré, il faut fixer une condition initiale, c est à dire un couple (t 0, y 0 ) tel que y(t 0 ) = y 0. On appelle problème de Cauchy la donnée d une équation différentielle et d une condition initiale. Le théorème de Cauchy-Lipschitz assure alors que si la fonction f est suffisamment régulière, il existe une unique solution au problème de Cauchy. On considèrera que cette condition de régularité est toujours respectée par la suite. Exemple : le problème de Cauchy y = y, y(0) = 1 admet une unique solution, la fonction exponentielle. 1
1.3 Résolution d une équation différentielle Dans la grande majorité des cas, on ne connaît pas de solution exacte à une équation différentielle : les solutions analytiques sont des exceptions. On sait qu une solution exacte existe, mais on ne peut pas en dire plus. À défaut d une solution exacte, on peut résoudre numériquement une équation différentielle, c est à dire obtenir une valeur numérique approchée y(t) pour un ensemble de temps discrets. L objectif est que lorsque le pas de temps diminue, la solution approchée converge vers la solution exacte. 2 Méthodes numériques Nous allons détailler quelques méthodes numériques permettant de résoudre l équation différentielle 2.1 Méthode d Euler dy dt = f(y, t), y(t 0) = y 0 (3) La méthode d Euler est la méthode numérique la plus simple pour résoudre une équation différentielle. Elle n est jamais utilisée en condition réelle car peu performante, mais elle a l avantage de la simplicité. Elle consiste à partir du point y 0 à t 0 et à intégrer la dérivée y obtenue en utilisant l équation différentielle. On part du développement limité y(t + t) = y(t) + t dy dt + O( t2 ) (4) On insère l équation différentielle (3) dans cette équation et on obtient y(t + t) = y(t) + f(y, t). On fixe un pas de temps fini t et une grille de temps {t i } = {t 0 + i t}, et on note y i = y(t i ). L équation (4) donne alors le schéma numérique : y i+1 = y i + t f(t i, y i ) (5) Note : rien n impose d utiliser un pas de temps constant t. Au contraire, on obtient une meilleure précision en prenant un pas de temps variable bien choisi. L erreur est cumulative : à chaque étape, on utilise le résultat de l étape précédente et on accroît l erreur. À chaque étape, l erreur commise est en O( t 2 ), l erreur totale sur le résultat final est donc contrôlée comme O( t) (méthode d ordre 1), ce qui est assez lent : il faut un pas de temps très petit pour obtenir un résultat proche de la valeur exacte. Une implémentation de la méthode d Euler pour résoudre l équation (refeq :ODE) sur l intervalle [t 0, t f ] avec un pas de temps dt est donc, en code Matlab : t = t0:dt:tf; n = length(t); % on fixe la grille de temps 2
y = zeros(1,n); y(1) = y0; % on fixe la taille du tableau y % on fixe la condition initiale for i=1:n-1 % on écrit y(i+1) : i+1 ne doit donc pas dépasser n y(i+1) = y(i) + f(y(i),t(i)); % on applique le schéma numérique end 2.2 Autres méthodes numériques La méthode d Euler converge très lentement, l erreur est mal contrôlée. On cherche donc des algorithmes plus efficaces. On ne détaillera pas le déroulé des méthodes, le lecteur intéressé est renvoyé à la littérature sur le sujet. Méthode du point du milieu : la méthode du point du milieu consiste à prendre la valeur de la dérivée au point situé au milieu de chaque intervalle de temps. C est une méthode d ordre 2, c est à dire que l erreur est contrôlée en O( t 2 ). Le schéma numérique s écrit y i+1 = y i + t f(t i+1/2, y i+1/2 ) (6) avec t i+1/2 = t i + t/2 et y i+1/2 = y i + t/2 f(t i, y i ). Méthode de Heun : la méthode de Heun, ou méthode d Euler améliorée ou encore méthode de Runge-Kutta d ordre 2 est une autre méthode d ordre 2. Son schéma numérique est : y i+1 = y i + t 2 (f(t i+1/2, ỹ) + f(t i, y i )) (7) avec ỹ = y i + t f(t i, y i ) Méthode de Runge Kutta d ordre 4 : la méthode de Runge-Kutta est une méthode générale utilisable à n importe quel ordre. Le schéma numérique de l ordre 4 s écrit 2.3 Application k 1 = t f(t i, y i ) k 2 = t f(t i+1/2, y i + k 1 /2) k 3 = t f(t i+1/2, y i + k 2 /2) k 4 = t f(t i+1, y i + k 3 ) y i+1 = y i + (k 1 + 2k 2 + 2k 3 + k 4 )/6 Implémenter la méthode du point du milieu et la méthode de Runge Kutta pour résoudre le problème de Cauchy y(t) = 2y, y(0) = 1 sur l intervalle de temps [0, 4].Tracer les courbe des résultats obtenu par cette méthode, par la méthode d Euler ainsi que la solution exacte. Faire varier le pas de temps et regarder comment les solutions évoluent. Tracer la courbe de l erreur exp(8) y(4) en fonction du pas de temps pour différentes méthodes. 3
2.4 Utilisation de la fonction ode45 Matlab propose sa propre méthode de résolution d équation différentielle avec la fonction ode45. Aller lire l aide en ligne de cette fonction. On lit que la syntaxe est [t,y] = ode45(odefun,tspan,y0). Pour résoudre le problème précédent, il faut donc rentrer [t45,y45] = ode45(@(t,y) 2*y,[0,4],1) Ici, on définit une fonction sans nom qui renvoie 2y et on passe une référence à cette fonction comme argument à ode45. On aurait aussi pu définir cette fonction dans un fichier annexe fct_ode1.m et l appeler avec ode45(@fct_ode1, [0,4],1). Matlab détermine tout-seul sa grille de temps, on ne lui passe donc que les bornes comme argument. 3 Équations différentielles d ordres supérieurs Nous avons jusqu ici traité uniquement des fonctions différentielles d ordre 1. En physique, on rencontre des équations différentielles d ordre supérieur, comme l équation du ressort ẍ + ω 2 x = 0. Le principe consiste à se ramener à une équation différentielle d ordre 1. Pour cela, on pose v = ẋ. On a alors les équations ẋ = v On pose Y = v = ω 2 x ( ) x, A = v ( ) 0 1 ω 2 0 et l équation du ressort devient une équation différentielle vectorielle d ordre 1 Ẏ = A Y (8) Le fait que l équation initiale soit linéaire permet de se ramener à un simple produit matriciel : dans le cas général non linéaire, on a juste une équation Ẏ = f(y ) (9) Plus généralement, une équation différentielle scalaire d ordre n peut se ramener à une équation vectorielle d ordre 1 de dimension n. Les conditions initiales s écrivent Y (0) = Y 0, c est à dire qu on fixe le vecteur initial, soit n scalaires. On peut ensuite appliquer les méthodes numériques du chapitre précédent. En particulier, ode45 ne résout que des équations différentielles d ordre 1, mais de dimension quelconque. Dans le cas du ressort, on construit la matrice A et on résout alors l équation différentielle sur l intervalle [0, 7] en rentrant [t45,y45] = ode45(@(t,y) A*y,[0,7],[1,0]) 4
Noter que y45 est alors un tableau de taille [length(t45), 2] : y45(:,1) contient la valeur de la position à chaque instant t i et y45(:,2) contient la vitesse au même instant. Dans le cas général, le plus simple est d écrire la fonction dy/dt dans un fichier annexe et d appeler cette fonction comme argument de ode45, plutôt que de la définir dans la ligne d appel de la fonction (se référer à l aide en ligne). Application : modifier les méthodes précédentes pour résoudre des équations d ordre 2. Résoudre l équation du ressort, tracer la vitesse et la position en fonction du temps et observer comment la solution évolue en fonction du pas de temps. 5