%% syntaxe : a f x0 y0 h baseeuler --> depose les points, calcules par
%% la methode d'Euler, de la courbe sur [x0, a] de la fonction h solution
%% de l'equa diff y' = f (x, y) verifiant f (x0) = y0
%% Plus precisement :
%% yn+1 = yn + h y'n ou y'n = f (xn, yn)
%% attention : on peut avoir a < x0, mais dans ce cas h doit etre negatif
%% autre syntaxe : a f x0 y0 n baseeuler ou n est le nombre de points
%% calcules. Il y aura alors n+1 points deposes sur la pile : (x0, y0)
%% plus les n suivants
/baseeuler {
9 dict begin
/v@r exch def
/y0 exch def
/x0 exch def
/@f exch def %% y'= @f (x, y)
/a exch def
/yn+1 0 def
/yn y0 def
v@r isinteger { %% si v@r est entier
/n v@r def %% c'est que c'est le nombre de points
/h a x0 sub n div def
} { %% sinon, v@r n'est pas entier
/h v@r def %% et c'est le pas
/n a x0 sub h div truncate cvi def
} ifelse
x0 y0
%% sur [x0, a]
/xn x0 def
n {
/yn+1 yn h xn yn @f mul add store
/yn yn+1 store
/xn xn h add store
xn yn+1
} repeat
end
} def
%% syntaxe : a b f x0 y0 h Euler --> depose les points, calcules par
%% la methode d'Euler, de la courbe sur [a, b] de la fonction h solution
%% de l'equa diff y' = f (x, y) verifiant h (x0) = y0
%% Plus precisement :
%% yn+1 = yn + h y'n ou y'n = f (xn, yn)
%% autre syntaxe : a b f x0 y0 h Euler ou n est le nombre de points a
%% calculer sur chacun des intervalles [a, x0] et [x0, b].
/Euler {
6 dict begin
/@h exch def %% le pas, ou nb de points
/y@ exch def
/x@ exch def
/@@f exch def %% y'= @f (x, y)
/@b exch def
/@a exch def
%% sur [a, x0]
@a x@ lt {
[
@a {@@f} x@ y@ @h dup isinteger not {neg} if baseeuler
]
reversep aload pop
x@ @b lt {
pop pop
} if
} if
%% sur [x0, b]
x@ @b lt {
@b {@@f} x@ y@ @h baseeuler
} if
end
} def
%% syntaxe : f x0 y0 h Euler --> depose les points, calcules par
%% la methode d'Euler, de la courbe sur [xmin, xmax] de la fonction h solution
%% de l'equa diff y' = f (x, y) verifiant h (x0) = y0
%% autre syntaxe : f x0 y0 n Euler ou n est le nb de points calcules
%% sur chacun des intervalle [a, x0] et [x0, b]
/euler {
xmax 5 1 roll
xmin 6 1 roll
Euler
} def
|