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 !
jmbdeblois
Messages : 30
Enregistré le : dim. 30 mai 2010, 09:01

Re: Non tracé des discontinuités

Message non lu par jmbdeblois » sam. 12 juin 2010, 18:50

Moi aussi, la seule technique que j'utilisais est le seuil d'acceptation.
Pour ce qui est de donner les points de discontinuité avant le tracé, ça peut-être une idée.

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 » sam. 12 juin 2010, 21:52

OG a écrit :Une solution intermédiaire serait déjà de pouvoir donner une liste (finie) des points de discontinuité.

Cela me semble le mieux aussi... et il faudrait ajouter différents styles de représentation (crochets, cercle, ...) et des facilités pour des prolongements par continuité.
Je le mets sur une liste de choses à faire cet été... si personne ne s'y colle avant.
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 !

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

Re: Non tracé des discontinuités

Message non lu par jmbdeblois » dim. 13 juin 2010, 16:05

je te laisse faire :D
et évidemment, cela m'intéresse beaucoup !

projetmbc
Messages : 34
Enregistré le : mer. 17 mars 2010, 08:31

Re: Non tracé des discontinuités

Message non lu par projetmbc » dim. 13 juin 2010, 16:32

GM a écrit :
OG a écrit :Une solution intermédiaire serait déjà de pouvoir donner une liste (finie) des points de discontinuité.

Cela me semble le mieux aussi... et il faudrait ajouter différents styles de représentation (crochets, cercle, ...) et des facilités pour des prolongements par continuité.
Je le mets sur une liste de choses à faire cet été... si personne ne s'y colle avant.

Les deux sont à considérer. Pourquoi ? Comment faire par exemple la fonction partie entière ? En résumé, on propose un seuil pour ne pas tracer des traits trop verticaux et dans ce cas, soit on utilise la liste comme tu le proposes, et pourquoi pas les deux en même temps. C'est juste un point de vue pour faire avancer le schmilblick.

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 » dim. 13 juin 2010, 16:52

projetmbc a écrit :Comment faire par exemple la fonction partie entière ?


Comme cela :

Figure asymptote cfc5186b001b38e5a25a9c6b64c9455e
*** 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. unitsize(1cm);
  3.  
  4. real Floor(real x) {return floor(x);}
  5.  
  6. pair[] Close;
  7. pair[] Open;
  8.  
  9. bool3 branch(real x) {
  10. static real lasty;
  11. static bool first=true;
  12. real y=floor(x);
  13. bool samebranch=first || lasty == y;
  14. first=false;
  15. if(samebranch) lasty=x;
  16. else {
  17. Open.push((x,lasty));
  18. Close.push((x,y));
  19. }
  20. lasty=y;
  21. return samebranch ? true : default;
  22. };
  23.  
  24. draw(graph(Floor,-5.5,5.5,500,branch));
  25. axes("$x$",rotate(0)*"$\lfloor x\rfloor$",red);
  26.  
  27. dot(Close);
  28. dot(Open,UnFill);
  29.  
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 !

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 » dim. 13 juin 2010, 17:01

... et voilà pour la fonction tangente :

Figure asymptote c0a3db6895bd808991ccf18ffbc00f05
*** 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. defaultpen(fontsize(10pt));
  2. import graph_pi;
  3. import geometry;
  4. usepackage("fourier");
  5. usepackage("mathrsfs");
  6.  
  7. size(450,0);
  8.  
  9. real a=3;
  10.  
  11. graphicrules(xunit=.8cm, yunit=1.5cm,
  12. xmin=-3pi, xmax=3pi,
  13. ymin=-4, ymax=4,
  14. crop=Crop
  15. );
  16. // Définition et tracé de la grille
  17. grid(xStep=pi/4, xstep=pi/12,
  18. yStep=1, ystep=.25,
  19. pTick=.7bp+.4white,
  20. ptick=.7bp+.8white,
  21. above=false
  22. );
  23. // Définition et tracé des axes
  24. cartesianaxis(
  25. xticks=Ticks(labelfrac(factor=pi,
  26. symbol="\pi",
  27. symbolin=true,
  28. zero=false),
  29. Step=pi/2, step=pi/12,
  30. pTick=1bp+black,
  31. ptick=1bp+gray),
  32. yticks=Ticks(labelfrac(zero=false),
  33. Step=1, step=.5,
  34. pTick=1bp+black,
  35. ptick=1bp+gray),
  36. Arrow
  37. );
  38.  
  39. real f(real x) {return tan(x);}
  40. bool3 condition(real x)
  41. {
  42. static int derniersigne=0;
  43. real a=x/(pi/2);
  44. if(a==floor(a)) return false;
  45. int signe = sgn(tan(x));
  46. bool b = derniersigne == 0 || signe == derniersigne;
  47. derniersigne = signe;
  48. return b ? true : default;
  49. }
  50.  
  51. guide[] Cf=graph(f,-3pi-.5,3pi+.5,n=1000,condition);
  52. draw(Cf,linewidth(1bp)+blue);
  53. xlimits(-3pi-.7,3pi+.7,Crop);
  54. ylimits(-3.25,3.25,Crop);
  55. label("$\mathscr{C}_{\tan}$",(-10pi/6,f(-10pi/6)),E);
  56.  
  57. label("La fonction $x\mapsto\tan(x)$ est p\'eriodique de p\'eriode $\pi$ \qquad et impaire.",truepoint(N),N);
  58. distance("$T= \pi$",(0,f(0)),(pi,f(pi)),offset=-5mm,Arrows);
  59.  
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 !

projetmbc
Messages : 34
Enregistré le : mer. 17 mars 2010, 08:31

Re: Non tracé des discontinuités

Message non lu par projetmbc » dim. 13 juin 2010, 17:44

Oups, en fait je parlais du principe d'une méthode générale. La solution proposée pour la partie entière est, il me semble, propre à cette fonction.

Sinon les deux courbes sont superbes.

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

Re: Non tracé des discontinuités

Message non lu par jmbdeblois » dim. 13 juin 2010, 20:40

GM a écrit :... et voilà pour la fonction tangente :

du coup, comment fais-tu pour tracer sur ce même graphe superbe, arctan mais "toutes" les branches, c'est à dire la vrai celle variant entre -pi/2 et pi/2 et les autres variant entre pi/2 et 3pi/2....?

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

Re: Non tracé des discontinuités

Message non lu par jmbdeblois » dim. 13 juin 2010, 20:57

je me réponds à moi même car j'ai honte de ce que j'ai écrit !!! Shame on me !

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, 01:13

Bonsoir,

j'ai essayé un truc tout à l'heure :

Figure asymptote f307251c59d82cfe71755b5e718000f7
*** 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,listedessauts[k].x,n=200),stylo);
  45. else
  46. draw(graph(f,listedessauts[k-1].x+epsi,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,listedessauts[k].x-epsi,n=200),stylo);
  53. else
  54. draw(graph(f,listedessauts[k-1].x+epsi,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,b,n=200),stylo);
  59. else
  60. draw(graph(f,listedessauts[listedessauts.length-1].x+epsi,b,n=200),stylo);
  61. }
  62.  
  63.  
  64. real f(real x) {return floor(x);}
  65. jump[] listedessauts;
  66. listedessauts[0]=jump(-2,0); //Abscisses des points de discontinuités
  67. listedessauts[1]=jump(-1,0); //0 si le point d'abssice -1 appartient à la branche
  68. listedessauts[2]=jump(0,0); //1 sinon
  69. listedessauts[3]=jump(1,0);
  70. listedessauts[4]=jump(2,0);
  71.  
  72. multisaut(f,listedessauts,-2.5,2.5,red);
  73.  
  74. // Définition de la fonction de Heaviside+0.5
  75. real H(real t) {return (t < 0 ? 0 : 1)+0.5;}
  76. jump pt=jump(0,0); // 1 saut, le point d'abscisse 0 n'appartient pas à la 1ère branche.
  77. saut(H,pt,-2.5,2.5,blue);
  78.  
  79.  
  80. //Fonction affine par morceaux
  81. real G(real y) {return y <=-1 ? -y : 1.5*y-1.5;}
  82. jump ici=jump(-1,1); // 1 saut, le point d'abscisse -1 appartient à la 1ère branche.
  83. saut(G,ici,-2.5,2.5,green);
  84.  
  85. xaxis(Arrow);
  86. yaxis(Arrow);
  87.  


Sur les trois exemples, ca a l'air de fonctionner.
Le code est sans doute pas optimal, mais bon ... faut bien que je m'entraine...
Commentaires et améliorations sont bien sur les bienvenus

maurice

PS :

Code : Tout sélectionner

//Fonction affine par morceaux
real G(real y) {return y <=-1 ? -y : 1.5*y-1.5;}
pour deux morceaux.
Comment peux-on définir une fonction affine par morceaux avec 3 branches par exemple ?
Doc 3D
Si ça ne marche pas, essayez la version pdf

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

Répondre