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 #1          » programme JavaScript | »  2nd ordre y" = φ(x,y,y')
     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 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) :

       » étude de l'erreur commise

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 :

» 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. 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 :

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

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

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

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


© Serge Mehl - www.chronomath.com