MetaPost / Représentations de solutions d'équations différentielles calculées extérieurement…

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.

fichier tgz

ode.mp

ode.1 ode.2 ode.3
 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;
 
 
Conversion au format PDF de ode.1
Vers la liste des images
 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); }
 
 
Conversion au format PDF de ode.2
Vers la liste des images
 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;
 
 
Conversion au format PDF de ode.3
Vers la liste des images
 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
fichier mp

 

Validation CSS Validation XHTMLJean-Michel Sarlat — Dernière modification : 11 août 2008 (0.06s - 3949687 - vendredi 9 janvier 2009) vers le haut