Non tracé des discontinuités
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 :
- Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
- Version d'Asymptote et éditeur utilisé pour les figures Asymptote
- Distribution LaTeX et éditeur utilisé pour les tex.
On va gagner du temps dans les réponses !
-
- Messages : 30
- Enregistré le : dim. 30 mai 2010, 09:01
Re: Non tracé des discontinuités
Pour ce qui est de donner les points de discontinuité avant le tracé, ça peut-être une idée.
Re: Non tracé des discontinuités
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.
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 !
-
- Messages : 30
- Enregistré le : dim. 30 mai 2010, 09:01
Re: Non tracé des discontinuités
et évidemment, cela m'intéresse beaucoup !
Re: Non tracé des discontinuités
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.
Re: Non tracé des discontinuités
projetmbc a écrit :Comment faire par exemple la fonction partie entière ?
Comme cela :
*** 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
- import graph;
- unitsize(1cm);
- real Floor(real x) {return floor(x);}
- pair[] Close;
- pair[] Open;
- bool3 branch(real x) {
- static real lasty;
- static bool first=true;
- real y=floor(x);
- bool samebranch=first || lasty == y;
- first=false;
- if(samebranch) lasty=x;
- else {
- Open.push((x,lasty));
- Close.push((x,y));
- }
- lasty=y;
- return samebranch ? true : default;
- };
- draw(graph(Floor,-5.5,5.5,500,branch));
- axes("$x$",rotate(0)*"$\lfloor x\rfloor$",red);
- dot(Close);
- dot(Open,UnFill);
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 !
Re: Non tracé des discontinuités
*** 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
- defaultpen(fontsize(10pt));
- import graph_pi;
- import geometry;
- usepackage("fourier");
- usepackage("mathrsfs");
- size(450,0);
- real a=3;
- graphicrules(xunit=.8cm, yunit=1.5cm,
- xmin=-3pi, xmax=3pi,
- ymin=-4, ymax=4,
- crop=Crop
- );
- // Définition et tracé de la grille
- grid(xStep=pi/4, xstep=pi/12,
- yStep=1, ystep=.25,
- pTick=.7bp+.4white,
- ptick=.7bp+.8white,
- above=false
- );
- // Définition et tracé des axes
- cartesianaxis(
- xticks=Ticks(labelfrac(factor=pi,
- symbol="\pi",
- symbolin=true,
- zero=false),
- Step=pi/2, step=pi/12,
- pTick=1bp+black,
- ptick=1bp+gray),
- yticks=Ticks(labelfrac(zero=false),
- Step=1, step=.5,
- pTick=1bp+black,
- ptick=1bp+gray),
- Arrow
- );
- real f(real x) {return tan(x);}
- bool3 condition(real x)
- {
- static int derniersigne=0;
- real a=x/(pi/2);
- if(a==floor(a)) return false;
- int signe = sgn(tan(x));
- bool b = derniersigne == 0 || signe == derniersigne;
- derniersigne = signe;
- return b ? true : default;
- }
- guide[] Cf=graph(f,-3pi-.5,3pi+.5,n=1000,condition);
- draw(Cf,linewidth(1bp)+blue);
- xlimits(-3pi-.7,3pi+.7,Crop);
- ylimits(-3.25,3.25,Crop);
- label("$\mathscr{C}_{\tan}$",(-10pi/6,f(-10pi/6)),E);
- label("La fonction $x\mapsto\tan(x)$ est p\'eriodique de p\'eriode $\pi$ \qquad et impaire.",truepoint(N),N);
- distance("$T= \pi$",(0,f(0)),(pi,f(pi)),offset=-5mm,Arrows);
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 !
Re: Non tracé des discontinuités
Sinon les deux courbes sont superbes.
-
- Messages : 30
- Enregistré le : dim. 30 mai 2010, 09:01
Re: Non tracé des discontinuités
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....?
-
- Messages : 30
- Enregistré le : dim. 30 mai 2010, 09:01
Re: Non tracé des discontinuités
Re: Non tracé des discontinuités
j'ai essayé un truc tout à l'heure :
*** 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
- import graph;
- unitsize(1cm);
- struct jump {
- real x;
- int i;
- void operator init(real x, int i) {
- this.x=x;
- this.i=i;
- }
- }
- void saut(real f(real x),jump ici, real a, real b, pen stylo=black) {
- real epsi=0.001;
- if (ici.i==1) {
- dot((ici.x,f(ici.x)),stylo);
- dot((ici.x,f(ici.x+epsi)),stylo,UnFill);
- draw(graph(f,a,ici.x,n=200),stylo);
- draw(graph(f,ici.x+epsi,b,n=200),stylo);
- }
- else {
- dot((ici.x,f(ici.x-epsi)),stylo,UnFill);
- dot((ici.x,f(ici.x)),stylo);
- draw(graph(f,a,ici.x-epsi,n=200),stylo);
- draw(graph(f,ici.x,b,n=200),stylo);
- }
- }
- void multisaut(real f(real x),jump[] listedessauts, real a, real b, pen stylo=black) {
- real epsi=0.001;
- if (listedessauts[0].i==1) {
- dot((listedessauts[0].x,f(listedessauts[0].x)),stylo);
- dot((listedessauts[0].x,f(listedessauts[0].x+epsi)),stylo,UnFill);
- draw(graph(f,a,listedessauts[0].x,n=200),stylo);
- }
- else {
- dot((listedessauts[0].x,f(listedessauts[0].x-epsi)),stylo,UnFill);
- dot((listedessauts[0].x,f(listedessauts[0].x)),stylo);
- draw(graph(f,a,listedessauts[0].x-epsi,n=200),stylo);
- }
- for (int k=1; k<listedessauts.length; k+=1) {
- if (listedessauts[k].i==1) {
- dot((listedessauts[k].x,f(listedessauts[k].x)),stylo);
- dot((listedessauts[k].x,f(listedessauts[k].x+epsi)),stylo,UnFill);
- if (listedessauts[k-1].i==1)
- draw(graph(f,listedessauts[k-1].x,listedessauts[k].x,n=200),stylo);
- else
- draw(graph(f,listedessauts[k-1].x+epsi,listedessauts[k].x,n=200),stylo);
- }
- else {
- dot((listedessauts[k].x,f(listedessauts[k].x-epsi)),stylo,UnFill);
- dot((listedessauts[k].x,f(listedessauts[k].x)),stylo);
- if (listedessauts[k-1].i==1)
- draw(graph(f,listedessauts[k-1].x,listedessauts[k].x-epsi,n=200),stylo);
- else
- draw(graph(f,listedessauts[k-1].x+epsi,listedessauts[k].x-epsi,n=200),stylo);
- }
- }
- if (listedessauts[listedessauts.length-1].i==1)
- draw(graph(f,listedessauts[listedessauts.length-1].x,b,n=200),stylo);
- else
- draw(graph(f,listedessauts[listedessauts.length-1].x+epsi,b,n=200),stylo);
- }
- real f(real x) {return floor(x);}
- jump[] listedessauts;
- listedessauts[0]=jump(-2,0); //Abscisses des points de discontinuités
- listedessauts[1]=jump(-1,0); //0 si le point d'abssice -1 appartient à la branche
- listedessauts[2]=jump(0,0); //1 sinon
- listedessauts[3]=jump(1,0);
- listedessauts[4]=jump(2,0);
- multisaut(f,listedessauts,-2.5,2.5,red);
- // Définition de la fonction de Heaviside+0.5
- real H(real t) {return (t < 0 ? 0 : 1)+0.5;}
- jump pt=jump(0,0); // 1 saut, le point d'abscisse 0 n'appartient pas à la 1ère branche.
- saut(H,pt,-2.5,2.5,blue);
- //Fonction affine par morceaux
- real G(real y) {return y <=-1 ? -y : 1.5*y-1.5;}
- jump ici=jump(-1,1); // 1 saut, le point d'abscisse -1 appartient à la 1ère branche.
- saut(G,ici,-2.5,2.5,green);
- xaxis(Arrow);
- yaxis(Arrow);
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;}
Comment peux-on définir une fonction affine par morceaux avec 3 branches par exemple ?
Si ça ne marche pas, essayez la version pdf
Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit