Le programme ode des plotutils (outils GNU) permet de calculer des solutions d'un système différentiel. Les résultats étant stockés dans un fichier, il est possible d'en donner une représentation avec MetaPost.
Pour accélérer la procédure, je définis le système tel qu'il sera soumis à ode à l'intérieur du fichier metapost (sous forme de commentaire) ainsi que les données variables d'une solution. Il ne reste qu'à procéder à des substitutions pour obtenir les différents fichiers trajectoire (ce qui est réalisé à l'aide d'un script de pré-traitement).
Les différents fichiers trajectoires et les fichiers de macros metapost utilisés sont dans l'archive.
input geometrie2d; input courbes; input graph; input plusa; %@ode'système:ed1.ode % y'= t - exp(y) % y = $2 % print t, y % step $1, $3 %@ode'solution: ed1-1 -4 3 5 %@ode'solution: ed1-2 -3 3 5 %@ode'solution: ed1-3 -2 3 5 %@ode'solution: ed1-4 -1 3 5 %@ode'solution: ed1-5 0 3 5 %@ode'solution: ed1-6 1 3 5 %@ode'solution: ed1-7 2 3 5 %@ode'solution: ed1-8 3 3 5 %@ode'solution: ed1-9 4 3 5 vardef trajectoire (expr f) = save s; gdata(f, s, if i>1:..fi (scantokens s1,scantokens s2)) enddef; vardef F(expr x,y) = x - exp(y) enddef;

beginfig(1); Repere(12,9,5,4.5,1.5,1.5); Axes; Debut; Unites(1); Graduations; % Tracé du champ de vecteurs ahlength := 2; ChampVecteurs(F,0.2,0.2,0.4,0.4,0.15,0.5white); trace Representation(ln,0.05,5,50) withpen pencircle scaled 1 withcolor (0.8,0.2,0.5); for i=1 upto 9: trace trajectoire("ed1-" & decimal i) withcolor (0.1,0.6,0.1); endfor Etiquette.rt("$y=\ln x$",1.5,(0.25,-2)); paLegendeCCO((-1.5,1.75),"$y'=x-e^{y}$"); Fin; endfig; vardef F(expr x,y) = -2x*y/(x*x+y*y) enddef; %@ode'système:ed2.ode % y' = -2*t*y/(t*t+y*y) % y = $2 % print t, y % step $1, $3 %@ode'eval: % for($i=1;$i<=10;$i++) { solution("ed2-$i",-4,-2.25+$i/2,4); }

beginfig(2); Repere(12,9,6,4.5,1.5,1.5); Axes; Debut; Unites(1); Graduations; % Tracé du champ de vecteurs ahlength := 2; ChampVecteurs(F,0.2,0.2,0.4,0.4,0.15,0.5white); for i=1 upto 10: trace trajectoire("ed2-" & decimal i) withcolor (0.1,0.6,0.1); endfor paLegendeCCO((0,-2.25),"$(x^2+y^2)y'+ 2xy = 0$"); Fin; endfig; %@ode'système:ed3.ode % y' = 2*t*y + y*y % y = $2 % print t, y % step $1, $3 %@ode'solution: ed3-1 -2 3 1 %@ode'solution: ed3-2 -3 3 2.8 vardef F(expr x,y) = 2x*y + y*y enddef;

beginfig(3); Repere(12,9,6,4.5,1.5,1.5); Axes; Debut; Unites(1); Graduations; trace Droite(origin,(1,-2)) withcolor (0.5,0.2,0.3); % Tracé du champ de vecteurs ahlength := 2; ChampVecteurs(F,0.2,0.2,0.4,0.4,0.15,0.5white); for i=1 upto 2: trace trajectoire("ed3-" & decimal i) withcolor (0.1,0.6,0.1); endfor paLegendeCCO((0,-2.25),"$y'=2xy+y^2$"); Fin; endfig; end