![]() ![]() Méthode d'Euler pour la résolution approchée d'une EDO du 2nd ordre y'' = φ(x,y,y') |
On s'intéresse ici à l'équation différentielle explicite du second ordre, d'inconnue y = f(x) définie sur l'intervalle J = [a,b] par :
y" = φ(x,y,y'), avec xo , yo , y'o donnés, x ∈ [a,b] (e)
Cas particulier des équations différentielles linéaires du second ordre : »
Revenons au cas général (e) : on transforme cette équation d'inconnue y = f(x) en un système de deux équations différentielles du 1er ordre en posant u = y' :
On recherche une solution approchée sous la forme d'un nuage de points (xi, yi), yi = f(xi) en subdivisant 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
Semblablement au cas
y' = f(x,y) du 1er ordre, une
approximation de y'(xi) est (yi+1
- yi )/(xi+1
- yi) = (yi+1
- yi )/h;
Si ui
désigne l'approximation de u(xi),
on peut écrire, selon (1) : (yi+1
- yi )/h = ui;
Une approximation de u'(xi) est (ui+1 - ui)/h devant égaler, selon (2), φ(xi,yi,ui).
Les relations (1), (2) et (3) sont alors respectivement discrétisées en :
Programmation de la méthode en JavaScript : |
➔ 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 :
On entrera y'' = φ(x,y,y') sous la forme d'une fonction de x, y, et u pour désigner y'.
Le programme utilise par défaut
l'équation différentielle
x2y" + xy' + y = 0 sur [1,5/2] avec y(0)
= 0, y'(0) = 1.
On peut écrire y" = (- xy' - y)/x2; on entrera
donc (en utilisant la notation u pour y') :
(-x*u - y)/(x*x). a = 1, b = 2.5, xo = 0, yo
= 0, y'o
= uo = 1. La solution
exacte de ce cas particulier d'équation
d'Euler est : y = sin(lnx).
! 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="(-x*u - y)/(x*x)" a=1;b=2.5 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="0";uo=1; yo=eval(prompt("xo="+a+". Entrez yo :",yo));if (yo==null) {return}; uo=eval(prompt("xo="+a+". Entrez uo = y'o :",uo));if (uo==null) {return}; n=25; n=eval(prompt("Entrez n :",n));if (n==null) {return}; h=(b-a)/n;alert("Ce qui donne h = "+h) nn=0; 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;un=uo while(nn<n) { nn++; unp=un+h*f(xn,yn,un);unn=Math.floor(unp*1000+.5)/1000 ynp=yn+h*un;ynn=Math.floor(ynp*1000+.5)/1000 xn = xn+h;xnn=Math.floor(xn*1000+.5)/1000 wdow.document.writeln("x"+nn+"="+xnn+" y"+nn+"="+ynn) un=unp;yn=ynp } } } function f(x,y,u) { with(Math) { z=eval(fonc) return z } } </SCRIPT> |
Comparaison entre la solution approchée
(nuage de points, n = 25) 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 - 1997
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.