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

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

» fonctions mathématiques usuelles

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 :

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