next up previous contents index
suivant: La méthode du point monter: Les méthodes numériques pour précédent: Les méthodes numériques pour   Table des matières   Index

La méthode d'Euler

La méthode d'Euler consiste à approcher la solution de cette équation différentielle au voisinage de t0 par sa tangente en ce point. Cette tangente a comme pente y'(t0) = f (t0, y(t0)) = f (t0, y0).
On a donc pour t proche de t0 par exemple pour t $ \in$ [t0 - h;t0 + h] :
y(t) $ \simeq$ y0 + f (t0, y0) . (t - t0) : on dit que h est le pas de l'approximation.
En principe plus h est petit, meilleure est l'approximation.
Soit h un pas, on pose t1 = t0 + h, et y1 = y0 + f (t0, y0) . (t1 - t0) = y0 + f (t0, y0) . h on a l'approximation :
y(t1) = y(t0 + h) $ \simeq$ y1
et on réitère cette approximation, donc si t2 = t1 + h :
y(t2) = y(t1 + h) $ \simeq$ y1 + f (t1, y1) . (t2 - t1) = $ \simeq$ y1 + f (t1, y1) . h.
On écrit donc la fonction euler_f, qui réalise une seule étape de cette méthode et qui permet de passer d'un point d'abscisse t0 au point d'abscisse t0 + h, ces points étant situés sur le graphe de la solution approchée par cette méthode.
euler_f(f,t0,y0,h):={
local t1,y1;
t1:=t0+h;
y1:=y0+h*f(t0,y0);
return (t1,y1);
}
Pour tracer le graphe de la solution approchée sur [t0;t1], on écrit :
segment(point((t0,y0)),point(euler_f(f,t0,y0,h)))

Pour trouver une solution approchée sur [a;b] de l'équation différentielle :
y'(t) = f (t, y(t)),  y(t0) = y0, avec t0 $ \in$ [a;b],
il suffit de partager [a;b] en parties égales de longueur h et d'appliquer plusieurs fois la fonction euler_f avec le pas h puis avec le pas - h.
Voici le programme qui trace la solution sur [a;b] dans l'écran DispG et qui utilise la fonction euler_f.
Les derniers segments servent à s'arrêter exactement en a et en b.

trace_sol(f,t0,y0,h,a,b):={
local t1,y1,td0,yd0,l1,j;
td0:=t0;
yd0:=y0;
h:=abs(h);
while (t0<b-h){
    l1:=euler_f(f,t0,y0,h);
    t1:=l1[0];
    y1:=l1[1];
    segment(t0+i*y0,t1+i*y1);
    t0:= t1;
    y0:=y1;
}
segment(t0+i*y0,b+i*(y0+(b-t0)*f(t0,y0)));
//on trace avec -h
t0:=td0;
y0:=yd0;
while ( t0>a+h){
    l1:=euler_f(f,t0,y0,-h);
    t1:=l1[0];
    y1:=l1[1];
    segment(t0+i*y0,t1+i*y1);
    t0:= t1;
    y0:=y1;
}
segment(t0+i*y0,a+i*(y0+(t0-a)*f(t0,y0))); 
}
ou encore pour avoir le dessin dans l'écran graphique obtenu comme réponse, on écrit une fonction qui renvoie la séquencee des segments à dessiner :
trace_euler(f,t0,y0,h,a,b):={
local td0,yd0,l1,j,ls;
td0:=t0;
yd0:=y0;
h:=abs(h);
ls:=[];
while (t0<b-h){
    l1:=euler_f(f,t0,y0,h);
    ls:=ls,segment(t0+i*y0,point(l1));
    (t0,y0):=l1;
}
ls:=ls,segment(t0+i*y0,point(euler_f(f,t0,y0,b-t0)));
//on trace avec -h en partant de td0 et de yd0 
//(td0 et  yd0 sont les valeurs du debut)
t0:=td0;
y0:=yd0;
while ( t0>a+h){
    l1:=euler_f(f,t0,y0,-h);
    ls:=ls,segment(t0+i*y0,point(l1));
    (t0,y0):=l1;
}
ls:=ls,segment(t0+i*y0,point(euler_f(f,t0,y0,a-t0))); 
return ls;
}

next up previous contents index
suivant: La méthode du point monter: Les méthodes numériques pour précédent: Les méthodes numériques pour   Table des matières   Index
Documentation de giac écrite par Renée De Graeve