Non tracé des discontinuités

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Non tracé des discontinuités

Message non lu par GM » mer. 16 juin 2010, 07:31

maurice a écrit :Comment peux-on définir une fonction affine par morceaux avec 3 branches par exemple ?

Avec deux tests... tout simplement... :

Code : Tout sélectionner

real f(real x) {return x <=1.5 ? ((x <=-0.5) ? -2 : -1) : 1;}
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Non tracé des discontinuités

Message non lu par maurice » mer. 16 juin 2010, 12:44

Oups, il y avait un problème !
Avec ça, c'est mieux.

Figure asymptote 296a04ad551cdea4fd7f85f77cff157b
*** 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.  
  2. import graph;
  3. unitsize(1cm);
  4. struct jump {
  5. real x;
  6. int i;
  7. void operator init(real x, int i) {
  8. this.x=x;
  9. this.i=i;
  10. }
  11. }
  12. void saut(real f(real x),jump ici, real a, real b, pen stylo=black) {
  13. real epsi=0.001;
  14. if (ici.i==1) {
  15. dot((ici.x,f(ici.x)),stylo);
  16. dot((ici.x,f(ici.x+epsi)),stylo,UnFill);
  17. draw(graph(f,a,ici.x,n=200),stylo);
  18. draw(graph(f,ici.x+epsi,b,n=200),stylo);
  19. }
  20. else {
  21. dot((ici.x,f(ici.x-epsi)),stylo,UnFill);
  22. dot((ici.x,f(ici.x)),stylo);
  23. draw(graph(f,a,ici.x-epsi,n=200),stylo);
  24. draw(graph(f,ici.x,b,n=200),stylo);
  25. }
  26. }
  27. void multisaut(real f(real x),jump[] listedessauts, real a, real b, pen stylo=black) {
  28. real epsi=0.001;
  29. if (listedessauts[0].i==1) {
  30. dot((listedessauts[0].x,f(listedessauts[0].x)),stylo);
  31. dot((listedessauts[0].x,f(listedessauts[0].x+epsi)),stylo,UnFill);
  32. draw(graph(f,a,listedessauts[0].x,n=200),stylo);
  33. }
  34. else {
  35. dot((listedessauts[0].x,f(listedessauts[0].x-epsi)),stylo,UnFill);
  36. dot((listedessauts[0].x,f(listedessauts[0].x)),stylo);
  37. draw(graph(f,a,listedessauts[0].x-epsi,n=200),stylo);
  38. }
  39. for (int k=1; k<listedessauts.length; k+=1) {
  40. if (listedessauts[k].i==1) {
  41. dot((listedessauts[k].x,f(listedessauts[k].x)),stylo);
  42. dot((listedessauts[k].x,f(listedessauts[k].x+epsi)),stylo,UnFill);
  43. if (listedessauts[k-1].i==1)
  44. draw(graph(f,listedessauts[k-1].x+epsi,listedessauts[k].x,n=200),stylo);
  45. else
  46. draw(graph(f,listedessauts[k-1].x,listedessauts[k].x,n=200),stylo);
  47. }
  48. else {
  49. dot((listedessauts[k].x,f(listedessauts[k].x-epsi)),stylo,UnFill);
  50. dot((listedessauts[k].x,f(listedessauts[k].x)),stylo);
  51. if (listedessauts[k-1].i==1)
  52. draw(graph(f,listedessauts[k-1].x+epsi,listedessauts[k].x-epsi,n=200),stylo);
  53. else
  54. draw(graph(f,listedessauts[k-1].x,listedessauts[k].x-epsi,n=200),stylo);
  55. }
  56. }
  57. if (listedessauts[listedessauts.length-1].i==1)
  58. draw(graph(f,listedessauts[listedessauts.length-1].x+epsi,b,n=200),stylo);
  59. else
  60. draw(graph(f,listedessauts[listedessauts.length-1].x,b,n=200),stylo);
  61. }
  62. real f(real x) {return floor(x);}
  63. jump[] listedessauts;
  64. listedessauts[0]=jump(-2,0);
  65. listedessauts[1]=jump(-1,0);
  66. listedessauts[2]=jump(0,0);
  67. listedessauts[3]=jump(1,0);
  68. listedessauts[4]=jump(2,0);
  69.  
  70. multisaut(f,listedessauts,-2.5,2.5,red);
  71.  
  72. // Définition de la fonction de Heaviside+0.5
  73. real H(real t) {return (t < 0 ? 0 : 1)+0.5;}
  74. jump pt=jump(0,0);
  75. saut(H,pt,-2.5,2.5,blue);
  76.  
  77. //Fonction affine par morceaux
  78. real G(real y) {return y <=-1 ? -y : 1.5*y-1.5;}
  79. jump ici=jump(-1,1);
  80. saut(G,ici,-2.5,2.5,green);
  81.  
  82. real m(real x) {return x <=1.5 ? ((x <=-0.5) ? -2 : -1) : 1;}
  83. jump[] la;
  84. la[0]=jump(-0.5,1);
  85. la[1]=jump(1.5,1);
  86. multisaut(m,la,-2.5,2.5,yellow);
  87.  
  88. xaxis(Arrow);
  89. yaxis(Arrow);
  90.  


Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

jmbdeblois
Messages : 30
Enregistré le : dim. 30 mai 2010, 09:01

Re: Non tracé des discontinuités

Message non lu par jmbdeblois » ven. 18 juin 2010, 05:12

C'est chouette ce que tu as produit Maurice.
Pour les fonctions continues par morceaux, la fonction de Heaviside est faite pour cela.(ou alors je n'ai pas compris ta remarque sur les fonctions ayant trois branches !)
Essaye ceci :

Code : Tout sélectionner

// Définition de la fonction de Heaviside
real H(real t) {return t < 0 ? 0 : 1;}
// Définition de la fonction
real f(real t){ return H(t)-2*H(t-pi/2)+H(t-pi);}


J'ai repris ta foction pointparpoint et c'est parfait. Sauf que je dois peaufiner pour faire apparaitre les exclusions inclusions de points aux bords des discontinuité.

Répondre