ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges
 

Méthode des différences finies          » programme JavaScript
     Méthode d'Euler pour la résolution approchée d'une équation différentielle

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). Les xi sont connus, les yi sont l'objet de la recherche.

Considérons le cas d'une équation différentielle du 1er ordre, se ramenant à la forme simple :

y' = φ(x,y), avec xo , yo donnés           » problème de Cauchy

On sait qu'une approximation de y' = f'(x) 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, subdivisons 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 yn désigne l'approximation de f(xn), on peut écrire alors écrire :

Notre équation différentielle y' =  φ(x,y) s'écrit alors :

yn+1 - yn = hφ(xn,yn),   xo, yo donnés

en espérant que le processus est convergent, ce qui est le cas lorsque f est suffisamment lisse : au moins de C1 (continue ainsi que sa dérivée première) sur l'intervalle J. Cependant, la précision est d'ordre 1 (en 1/h). Ce qui est faible. Pour des équations non pathologiques (évitez d'intégrer au voisinage d'une asymptote de la courbe intégrale...), il y a peu d'espoir d'un résultat satisfaisant si h > 1/1000 : évitez d'intégrer sur des intervalles de forte amplitude.

Pour une étude rigoureuse de la méthode (consistance, choix judicieux de h, convergence, erreur commise), on pourra se reporter aux références indiquées in fine et tout particulièrement à l'excellent livre de Claude Brezinski (professeur honoraire de l'université des sciences et techniques de Lille) : Algorithmique numérique (» réf.4): on ne peut que très difficilement faire mieux à ce sujet.

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 d'approximation polynomiale ou non, comme par les moindres carrés, fournissant une expression acceptable de f.

Approximation et polynômes orthogonaux : »

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 :

conduisant à :

L'algorithme se programme très facilement. On peut bien entendu l'améliorer pour contrôler la convergence et évaluer l'erreur commise.

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 :

»   fonctions mathématiques usuelles

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. :",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 :

  1. 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

  2. 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é).

  3. 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

  4. Algorithmique numérique, ch. 3, pages 75-99, par Claude Brezinski, 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.

  5. 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.

  6. 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


© Serge Mehl - www.chronomath.com