%% syntaxe : a f x0 y0 h baseeulermod --> depose les points, calcules par
%% la methode d'Euler modifiee (avec un correcteur), 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 :
%% predicteur : tyn+1 = yn + h y'n
%% correcteur : yn+1 = yn + (h/2) (ty'n+1 + y'n)
%% ou y'n = f (xn, yn) et ty'n+1 = f (xn+1, tyn+1)
%% attention : on peut avoir a < x0, mais dans ce cas h doit etre negatif
%% autre syntaxe : a f x0 y0 n baseeulermod 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
/baseeulermod {
11 dict begin
/v@r exch def
/y0 exch def
/x0 exch def
/@f exch def %% y'= @f (x, y)
/a exch def
/tyn+1 0 def %% valeur temporaire de yn+1
/yn+1 0 def
/yn y0 def
/xn x0 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
%% sur [x0, a]
x0 y0
n {
/tyn+1 yn h xn yn @f mul add store
/yn+1 yn h 2 div xn h add tyn+1 @f xn yn @f add 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 Eulermod --> depose les points, calcules par
%% la methode d'Euler modifiee (avec un correcteur), 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 :
%% predicteur : tyn+1 = yn + h y'n
%% correcteur : yn+1 = yn + (h/2) (ty'n+1 + y'n)
%% ou y'n = f (xn, yn) et ty'n+1 = f (xn+1, tyn+1)
/Eulermod {
6 dict begin
/@h exch def %% le pas
/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 neg baseeulermod
]
reversep aload pop
x@ @b lt {
pop pop
} if
} if
%% sur [x0, b]
x@ @b lt {
@b {@@f} x@ y@ @h baseeulermod
} if
end
} def
%% syntaxe : f x0 y0 h eulermod --> 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
/eulermod {
xmax 5 1 roll
xmin 6 1 roll
Eulermod
} def
%% %% syntaxe : a f x0 y0 h baseeulermod --> depose les points, calcules par
%% %% la methode d'Euler modifiee (avec un correcteur), 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 :
%% %% predicteur : tyn+1 = yn + h y'n
%% %% correcteur : yn+1 = yn + (h/2) (ty'n+1 + y'n)
%% %% ou y'n = f (xn, yn) et ty'n+1 = f (xn+1, tyn+1)
%% %% attention : on peut avoir a < x0, mais dans ce cas h doit etre negatif
%% /baseeulermod {
%% 6 dict begin
%% /h exch def %% le pas
%% /y0 exch def
%% /x0 exch def
%% /@f exch def %% y'= @f (x, y)
%% /a exch def
%%
%% /tyn+1 0 def %% valeur temporaire de yn+1
%% /yn+1 0 def
%% /yn y0 def
%% /xn x0 def
%%
%% %% sur [x0, a]
%% x0 y0
%% a x0 sub h div truncate cvi {
%% /tyn+1 yn h xn yn @f mul add store
%% /yn+1 yn h 2 div xn h add tyn+1 @f xn yn @f add 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 Eulermod --> depose les points, calcules par
%% %% la methode d'Euler modifiee (avec un correcteur), 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 :
%% %% predicteur : tyn+1 = yn + h y'n
%% %% correcteur : yn+1 = yn + (h/2) (ty'n+1 + y'n)
%% %% ou y'n = f (xn, yn) et ty'n+1 = f (xn+1, tyn+1)
%% /Eulermod {
%% 6 dict begin
%% /@h exch def %% le pas
%% /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 neg baseeulermod
%% ]
%% reversep aload pop
%% x@ @b lt {
%% pop pop
%% } if
%% } if
%%
%% %% sur [x0, b]
%% x@ @b lt {
%% @b {@@f} x@ y@ @h baseeulermod
%% } if
%%
%% end
%% } def
%%
%% %% syntaxe : f x0 y0 h eulermod --> 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
%% /eulermod {
%% xmax 5 1 roll
%% xmin 6 1 roll
%% Eulermod
%% } def
|