Fichier approx_euler_03.jps — Modifié le 14 Janvier 2007 à 18 h 21
%% auteur :
%% jpv, d'apres un exemple original de D. Rodriguez (en pstricks)
%% http://melusine.eu.org/syracuse/pstricks/rodriguez/eqdf/
%% et en partant du code de JJ Bataille
5 setxyrapport
100 setxunit
-.5 6 setxrange
-3 20 setyrange
0 3 setxrange
0 20 setyrange
/quadrillagewidth [.5] def
[.2 .2] {.8 setgray} Quadrillage
[1 1] {.2 setgray} Quadrillage
ticks
marks
traceaxes
%%%% L'équation différentielle y'=y avec la condition initiale y(0)=1 sur lintervalle [0;3]%%%%
%%% La foction solution%%%%%%%%%
/f {setxvar
#rpn# Exp (x)
} def
%%%%%%%%% Paramètres pour l'approx par la méthode d'Euler%%%%%%%
/pas {2 nb div} def %%%calcul du pas de la subdivision
/x0 {0} def %% coordonnees du point a l'origine
/y0 {1} def
/a {0} def %% intervalle de calcul = [a;b]
/b {3} def
%%%%% L'exécutable qui calcule (x_k+1, y_k+1) en fonction de (x_k,y_k)%%%%%%
/F {
2 dict begin
/y exch def
/x exch def
#rpn# y
end
} def
%% %%%%%%%% première execution et tracé en rouge %%%%%%%%%%
/pas .5 def
bleu
[a b {F} x0 y0 pas Euler ] ligne
/pas .05 def
rouge
[a b {F} x0 y0 pas Euler ] ligne
/pas .5 def
orange
[a b {F} x0 y0 pas Rungekutta ] ligne
jaune
a b {f} Courbe
%%%%%%%%% Labels %%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% Label 1 %%%
<tex>
\' Equation $y' = y$ avec $y (0) = 1$
</tex>
%% placement du label 1
noir
/fillstyle {jaune fill} def
boxit
3.25 -2 [2 dup] cctexlabel
%% legende
2 setlinewidth
/pas -1.5 def
/longueur .2 def
/xd 3.4 def
/h1 14 def
/h2 h1 pas add def
/h3 h2 pas add def
/h4 h3 pas add def
jaune
[xd h1 xd longueur add h1] ligne
rouge
[xd h2 xd longueur add h2] ligne
bleu
[xd h3 xd longueur add h3] ligne
orange
[xd h4 xd longueur add h4] ligne
noir
#tex# solution exacte
xd longueur add h1 [2 dup] crtexlabel
#tex# Euler d'ordre 1, $h = 0, 05$
xd longueur add h2 [2 dup] crtexlabel
#tex# Euler d'ordre 1, $h = 0, 5$
xd longueur add h3 [2 dup] crtexlabel
#tex# Runge Kutta, $h = 0, 5$
xd longueur add h4 [2 dup] crtexlabel