Source PostScript (euler.pps)

Retour Texte non formaté
%% 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