Page 1 sur 1

Fonction Heaviside - Echelon unité

Posté : sam. 29 mai 2010, 21:21
par GM
Suite à une demande sur Mathematex, voilà un code qui pourra peut-être être utile à certains : obtenir la courbe représentative de la fonction de Heaviside (également appelée fonction échelon) définie par :

Code : Tout sélectionner

real H(real t) {return t < 0 ? 0 : 1;}
Un appel particulier de la fonction graph permet de renvoyer un guide[], pour tracer des courbes par morceaux : un paramètre cond de type bool3 permet de définir les conditions pour relier ou pas les points.

Code : Tout sélectionner

guide[] graph(picture pic=currentpicture, real f(real), real a, real b,
int n=ngraph, real T(real)=identity, bool3 cond(real),
interpolate join=operator --);

Figure asymptote d36798e1dcb52b3244046b27b45c7b84
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph;
  2. size(300);
  3.  
  4. real xmin=-3,xmax=3;
  5. real ymin=-1,ymax=2;
  6.  
  7. // Test pour savoir s'il faut relier les points ou pas lors de l'utilisation de graph.
  8. bool3 condition(real x)
  9. { static int derniersigne=0;
  10. int signe = sgn(x);
  11. bool b = derniersigne == 0 || signe == derniersigne;
  12. derniersigne = signe;
  13. return b ? true : default;
  14. }
  15.  
  16. // Définition de la fonction
  17. real H(real t) {return t < 0 ? 0 : 1;}
  18.  
  19. // Tracé de la courbe
  20. guide[] CH=graph(H,xmin,xmax,condition,n=400);
  21. draw(CH,1.5bp+blue);
  22.  
  23. real margeaxe=.4;
  24. xaxis(Label("$x$",align=Align),xmin-margeaxe,xmax+margeaxe,Ticks(NoZero),Arrow);
  25. yaxis(ymin-margeaxe,ymax+margeaxe,Ticks(NoZero),Arrow);
  26.  
  27. shipout(bbox(2mm,Fill(white)));