![]() ![]() Méthode d'Euler-Cauchy pour la résolution approchée d'une EDO du 1er ordre y' = φ(x,y) |
D'une façon générale, la résolution d'une équation différentielle :
x∈J, Φ(x,y,y',y",...) = 0, y = f(x)
par différences finies consiste à discrétiser l'intervalle d'étude J = [a,b] sur lequel est définie l'équation. On recherche une solution approchée sous la forme d'un nuage de points (xi, yi), yi = f(xi) de la courbe intégrale. Les xi sont connus, les yi sont l'objet de la recherche. Hormis le cas du 1er ordre y' = φ(x,y) étudié sur cette page et celui du second ordre y'' = φ(x,y,y') le problème n'est pas simple.
Considérons donc ici le cas d'une équation différentielle explicite du 1er ordre, se ramenant à la forme simple (explicite pour signifier que y' n'intervient pas dans le second membre) :
y' = φ(x,y), avec xo et yo = f(xo) donnés (e)
! Certains cas particuliers peuvent posséder des solutions "faciles" à déterminer. Mais dans l'immense majorité (non dénombrable) des cas, les primitives rencontrées ne sont pas calculables...
Cas y' = φ(x) : y n'apparait pas dans φ, par exemple y' = 2/x; la solution y est une primitive de φ dont la constante d'intégration est calculée au moyen des conditions initiales. la solution est ici f(x) = ln(x2) + k
Cas y' = φ(y) : x n'apparait pas dans φ, par exemple y' = y + 1 sur J = [0,1]; on peut écrire y' = dy/dx, d'où dy/φ(y) = dx : on est ainsi ramené au cas d'une équation à variables séparables; la solution de l'exemple est donnée par ln|y + 1| = x + k (» fonction ln). Par suite, y = - 1±ex + k. Si la condition initiale est par exemple f(0) = -2, il apparaît que la solution y = - 1+ ex + k ne convient pas. La seconde solution fournit k = 0. Finalement f(x) = -1 - ex.
Cas des équations différentielles linéaire du premier ordre : »
Revenons au cas général
(e) : on sait qu'une approximation de
la fonction dérivée y' =
f'(x) de la
fonction cherchée est donnée,
pour h "petit", par le quotient des différences finies
Δy/Δx
(taux d'accroissement) :
Comme dans le cas de l'intégration approchée, on subdivise J en n sous-intervalles (de même amplitude pour simplifier l'algorithme) :
a = xo < x1 < x2 < ... < xn= b , xi = a + ih, h = (b - a)/n
Si yi désigne l'approximation de f(xi), on peut écrire alors écrire :
➔ Pour une fonction ne posant pas de problème aux bornes de J, il peut être plus judicieux d'utiliser la dérivée symétrique (non utilisée cependant dans le programme ci-après) :
conduisant alors à
l'approximation :
Finalement, notre équation différentielle y' = φ(x,y) discrétisée consiste à déterminer les yi au moyen de la récurrence :
yi+1 = yi + hφ(xi,yi), xo, yo donnés
en espérant que le processus soit convergent, ce qui est le cas lorsque f est suffisamment lisse sur l'intervalle J : de classe C1 (continue ainsi que sa dérivée première), ou de dérivée bornée, ou encore lipschitzienne.
Problème de Cauchy : »
La représentation graphique du nuage de points M(xi, yi) obtenus fournit une approximation de la courbe intégrale dont on peut ensuite rechercher une équation approchée (polynomiale, logarithmique, exponentielle) par diverses méthodes, approximation polynomiale ou moindres carrés, fournissant une expression acceptable de f.
∗∗∗
Un exemple
d'usage de la méthode
Programmation de la méthode en JavaScript : |
L'algorithme se programme très facilement. On peut bien entendu l'améliorer pour contrôler la convergence et majorer l'erreur commise. Évitez d'intégrer sur des intervalles de forte amplitude. Un pas h = (b - a)/n trop grand donnera des résultats imprécis et un h trop petit peut provoquer des erreurs d'arrondi.
➔ Pour tester ce programme vous devez entrer votre fonction φ(x,y) en utilisant une syntaxe comprise par le langage JavaScript. L'instruction with (Math), placée en début de procédure, évite à l'utilisateur de préciser Math devant chaque fonction mathématique utilisée. Les opérations et fonctions usuelles sont les suivantes :
Le programme utilise par défaut l'équation différentielle y' + y + 1 = ex sur [0,1] avec y(0) = 1/2. On entre y' = φ(x,y) sous la forme exp(x) - y - 1. J = [0,1], xo = 0, yo = 1/2. La solution exacte est : y = e-x + ½ex - 1.
! Pensez à refermer les fenêtres d'affichage avant de relancer le programme, sinon rien ne se passe... !
<SCRIPT LANGUAGE="JavaScript"> var x,y,z,fonc var pi=3.141592653589793; var e=2.7182818284590452; function go() { with (Math) { fonc="exp(x)-y-1" a=0;b=1 fonc=prompt("Entrez votre équo. diff. y' =",fonc) a=eval(prompt("Intervalle [a,b]. Entrez a :",a));if (a==null) {return}; b=eval(prompt("Intervalle [a,b]. Entrez b :",b));if (b==null) {return}; xo=a;yo="1/2"; yo=eval(prompt("xo="+a+". Entrez yo :",yo));if (yo==null) {return}; n=40; n=eval(prompt("Entrez n :",n));if (n==null) {return}; h=(b-a)/n; nn=0; //document.body.style.overflow='visible'; wdow=open("","","height=720,width=450","scrollbars=yes"); wdow.document.write("<PRE>"); wdow.document.writeln("x"+"0"+"="+xo+" y"+"0"+"="+yo) xn=xo;yn=yo while(nn<n) { nn++; xn = xn+h;xnn=Math.floor(xn*1000+.5)/1000 yn=yn+h*f(xn,yn);ynn=Math.floor(yn*1000+.5)/1000 wdow.document.writeln("x"+nn+"="+xnn+" y"+nn+"="+ynn) } } } function f(x,y) { with(Math) { z=eval(fonc) return z } } </SCRIPT> |
Comparaison entre la solution approchée
(nuage de points, n = 40) et la solution exacte
avec l'excellentissime logiciel gratuit Graphmatica (capture d'écran) :
➔ Pour en savoir plus :
La méthode d'Euler (niveau TerS), par Rémy
Coste, professeur lycée d'Arpajon :
http://numerisation.univ-irem.fr/AAA/AAA04008/AAA04008.pdf
http://vekemans.free.fr/E1/pb_cauchy.pdf, par Denis Vekemans, IUFM Pas
de Calais.
Le Problème de Cauchy, condition de Lipschitz et la
résolution approchée des équations différentielles du 1er ordre
(méthode
d'Euler et de Runge-Kutta, étude de la convergence, consistance, stabilité).
Résolution numérique des équations différentielles
ordinaires, niv. master, par Jacques Lefrère (UPMC, Paris).
Méthodes d'Euler, Runge-Kutta, Adams, ..., systèmes différentiels.
http://wwwens.aero.jussieu.fr/lefrere/master/mni/mncs/cours/equa-diff-x4.pdf
Méthodes numériques de résolution d’équations
différentielles, par Brian Stout (univ. Marseille) :
https://www.fresnel.fr/perso/stout/Anal_numer/Cours4.pdf
Initiation à l'analyse numérique, par
R. Theodor (CNAM), Éd. Masson - 1988
consistance, convergence, stabilité, ordre d'une méthode,
évaluation de l'erreur commise, ...
Algorithmique numérique,
ch. 3, pages 75-99, par Claude Brezinski, univ. Lille - Coll. Elipses, Paris - 1988
Étude la méthode d'Euler, consistance, convergence, accélération de
convergence (méth. Runge-Kutta), évaluation de l'erreur commise
Mathématiques et informatique (classes
prépa.), pages 188-205, par Denis Monasse, Éd. Vuibert, Paris - 1988.
Méthodes d'Euler et de Runge-Kutta, équations d'ordre supérieur à 1 en
se ramenant en se ramenant à un système différentiel du 1er ordre.