Tracer une suite de fonctions avec Asymptote
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 !
Tracer une suite de fonctions avec Asymptote
J'ai le problème suivant :
Je voudrais tracer la suite de fonctions ( ) pour .
Pour différentes valeurs de , je voudrais positionner les graphes comme dans l'image ci-dessous.
Quelqu'un a une idée?
Merci
Toufan
- Fichiers joints
-
- dessin.png (5.73 Kio) Vu 10522 fois
Re: Tracer une suite de fonctions avec Asymptote
Code : Tout sélectionner
//Plusieurs graphes sur une même figure.
import graph;
picture pic1,pic2,pic3,pic4;
//La fonction
real f(real x){
return 5exp(-5x)*cos(60x);
}
//Le tracé de la fig1
size(pic1,6cm,4cm,IgnoreAspect);
draw(pic1,graph(f, 0, .8), red+2);
add(pic1.fit(),(0,0),W);
//Le tracé de la fig2
size(pic2,6cm,4cm,IgnoreAspect);
draw(pic2,graph(f, 0, .8), blue+2);
add(pic2.fit(),(5mm,0),E);
//Le tracé de la fig3
size(pic3,6cm,4cm,IgnoreAspect);
draw(pic3,graph(f, 0, .8), green+2);
add(pic3.fit(),(0,-2cm),SW);
//Le tracé de la fig4
size(pic4,6cm,4cm,IgnoreAspect);
draw(pic4,graph(f, 0, .8), black+2);
add(pic4.fit(),(5mm,-2cm),SE);
Re: Tracer une suite de fonctions avec Asymptote
*** 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);
- typedef real fonction_avec_parametre(real);
- fonction_avec_parametre F(real n) {
- return new real(real x) {return x^n;};
- };
- picture fonction_puissance_n(int n) {
- picture pic;
- unitsize(pic,1cm);
- draw(pic,graph(F(n),0,4),Pen(n));
- limits(pic,(0,0),(4,4),Crop);
- xaxis(pic,"$x$",BottomTop,LeftTicks);
- yaxis(pic,format("$x^%i$",n),LeftRight,RightTicks(trailingzero));
- return pic;
- }
- real ev=5.5;
- for(int i=0; i < 3; ++i){
- add(fonction_puissance_n(2*i).fit(),(0,-i*ev),W);
- add(fonction_puissance_n(2*i+1).fit(),(0,-i*ev),E);
- }
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: Tracer une suite de fonctions avec Asymptote
Toufan
Re: Tracer une suite de fonctions avec Asymptote
sur
sur
sur
sur
sur
sur
Manuellement, on peut appliquer la méthode proposée par ctop.
L'idée c'est automatiser le problème et appliquer la méthode proposée par Gaétan.
Créer deux listes l'une pour les fonctions et l'autre pour les domaines, comme ceci :
Quelqu'un a une idée?
Merci
D.GH
Re: Tracer une suite de fonctions avec Asymptote
*** 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 FONCTION{
- string n;
- real expr(real);
- real xmin;
- real xmax;
- real ymin;
- real ymax;
- void operator init(string n="",
- real expr(real),
- real xmin,
- real xmax,
- real ymin=-5,
- real ymax=5)
- {
- this.n=n;
- this.expr=expr;
- this.xmin=xmin;
- this.xmax=xmax;
- this.ymin=ymin;
- this.ymax=ymax;
- }
- }
- FONCTION f1=FONCTION("$f_1$",new real(real x) {return sin(x);}, 0, 3pi, -1, 1),
- f2=FONCTION("$f_2$",new real(real x) {return cos(x);}, -pi, 3pi, -1, 1),
- f3=FONCTION("$f_3$",new real(real x) {return log(1+(sin(x))^2);}, -2pi, 5pi),
- f4=FONCTION("$f_4$",new real(real x) {return log(1+(cos(x))^2);}, -3pi, pi),
- f5=FONCTION("$f_5$",new real(real x) {return sqrt(1+x^2);}, -2, 7),
- f6=FONCTION("$f_6$",new real(real x) {return sin(pi*x)+f5.expr(x);}, -1, 1);
- FONCTION[] f={f1,f2,f3,f4,f5,f6} ;
- picture courbefonction(FONCTION f) {
- picture pic;
- size(pic,120,120,false);
- draw(pic,graph(f.expr,f.xmin,f.xmax));
- limits(pic,(f.xmin,f.ymin),(f.xmax,f.ymax),Crop);
- xaxis(pic,"$x$",BottomTop,LeftTicks);
- yaxis(pic,f.n,LeftRight,RightTicks(trailingzero));
- return pic;
- }
- real eh=10, ev=5;
- for(int i=0; i < 3; ++i){
- add(courbefonction(f[2*i]).fit(),(0,-i*ev),eh*W);
- add(courbefonction(f[2*i+1]).fit(),(0,-i*ev),eh*E);
- }
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: Tracer une suite de fonctions avec Asymptote
au delà du changement esthétique, à noter la modification de la fin du code... qui me semble mieux.
*** 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 FONCTION{
- string n;
- real expr(real);
- real xmin;
- real xmax;
- real ymin;
- real ymax;
- void operator init(string n="",
- real expr(real),
- real xmin,
- real xmax,
- real ymin=-5,
- real ymax=5)
- {
- this.n=n;
- this.expr=expr;
- this.xmin=xmin;
- this.xmax=xmax;
- this.ymin=ymin;
- this.ymax=ymax;
- }
- }
- FONCTION f1=FONCTION("$f_1(x)$",new real(real x) {return sin(x);}, 0, 3pi, -1.5, 1.5),
- f2=FONCTION("$f_2(x)$",new real(real x) {return cos(x);}, -pi, 3pi, -1.5, 1.5),
- f3=FONCTION("$f_3(x)$",new real(real x) {return log(1+(sin(x))^2);}, -2pi, 5pi, -.5, 1),
- f4=FONCTION("$f_4(x)$",new real(real x) {return log(1+(cos(x))^2);}, -3pi, pi, -.5, 1),
- f5=FONCTION("$f_5(x)$",new real(real x) {return sqrt(1+x^2);}, -2, 7, 0, 10),
- f6=FONCTION("$f_6(x)$",new real(real x) {return sin(pi*x)+f5.expr(x);}, -1, 1, -1, 3);
- FONCTION[] f={f1,f2,f3,f4,f5,f6} ;
- picture courbefonction(FONCTION f, pen p) {
- picture pic;
- size(pic,120,120,false);
- draw(pic,graph(f.expr,f.xmin,f.xmax),p);
- limits(pic,(f.xmin,f.ymin),(f.xmax,f.ymax),Crop);
- xaxis(pic,Label("$x$",EndPoint,NE),
- Ticks(scale(.7)*Label(align=E),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
- Arrow);
- yaxis(pic,Label(f.n,EndPoint,NE),
- Ticks(scale(.7)*Label(align=W),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
- Arrow,autorotate=false);
- return pic;
- }
- real eh=10, ev=5;
- for(int i=0; i < 3; ++i){
- picture pic;
- add(pic,courbefonction(f[2*i],Pen(2*i)).fit(),(0,0),eh*W);
- add(pic,courbefonction(f[2*i+1],Pen(2*i+1)).fit(),(0,0),eh*E);
- add(pic.fit(),truepoint(S),ev*S);
- }
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: Tracer une suite de fonctions avec Asymptote
GM a écrit :Quelque chose comme cela ?
Parfait.
Je vais pousser le problème plus loin. Est-il possible de produire les graphes de six fonctions à partir d'un seul code ?
Je vais expliquer , je cherche une commande qu'on note newplot qui crée une nouvelle figure. Quelque chose comme :
Code : Tout sélectionner
newplot --- > figure 1
draw(pic,graph(f1.expr,f1.xmin,f1.xmax));
....
....
newplot --- > figure 6
draw(pic,graph(f6.expr,f6.xmin,f6.xmax));
Merci
D.GH
Re: Tracer une suite de fonctions avec Asymptote
GM a écrit :Une petite variante.
au delà du changement esthétique, à noter la modification de la fin du code... qui me semble mieux.
Oui, avec des couleurs c'est mieux.
Cet exemple mérite d'être mis sur ton site (Galeries d'exemples).
D.GH
Re: Tracer une suite de fonctions avec Asymptote
DGH a écrit :Je vais pousser le problème plus loin. Est-il possible de produire les graphes de six fonctions à partir d'un seul code ?
Je vais expliquer , je cherche une commande qu'on note newplot qui crée une nouvelle figure. Quelque chose comme :Code : Tout sélectionner
newplot --- > figure 1
draw(pic,graph(f1.expr,f1.xmin,f1.xmax));
....
....
newplot --- > figure 6
draw(pic,graph(f6.expr,f6.xmin,f6.xmax));
Je ne suis pas sûr de comprendre. Tu veux un fichier asy qui produit plusieurs images ????
Si c'est cela que tu veux, essaye ceci :
Code : Tout sélectionner
import graph;
unitsize(1cm);
////////////////////////////////////////////////
// Une structure pour définir des fonctions
////////////////////////////////////////////////
struct FONCTION{
string n;
real expr(real);
real xmin;
real xmax;
real ymin;
real ymax;
void operator init(string n="",
real expr(real),
real xmin,
real xmax,
real ymin=-5,
real ymax=5)
{
this.n=n;
this.expr=expr;
this.xmin=xmin;
this.xmax=xmax;
this.ymin=ymin;
this.ymax=ymax;
}
}
FONCTION f1=FONCTION("$f_1(x)$",new real(real x) {return sin(x);}, 0, 3pi, -1.5, 1.5),
f2=FONCTION("$f_2(x)$",new real(real x) {return cos(x);}, -pi, 3pi, -1.5, 1.5),
f3=FONCTION("$f_3(x)$",new real(real x) {return log(1+(sin(x))^2);}, -2pi, 5pi, -.5, 1),
f4=FONCTION("$f_4(x)$",new real(real x) {return log(1+(cos(x))^2);}, -3pi, pi, -.5, 1),
f5=FONCTION("$f_5(x)$",new real(real x) {return sqrt(1+x^2);}, -2, 7, 0, 10),
f6=FONCTION("$f_6(x)$",new real(real x) {return sin(pi*x)+f5.expr(x);}, -1, 1, -1, 3);
FONCTION[] f={f1,f2,f3,f4,f5,f6};
size(120,120,false);
///////////////////////
// Figure 1
///////////////////////
draw(graph(f1.expr,f1.xmin,f1.xmax),red);
limits((f1.xmin,f1.ymin),(f1.xmax,f1.ymax),Crop);
xaxis(Label("$x$",EndPoint,NE),
Ticks(scale(.7)*Label(align=E),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
Arrow);
yaxis(Label(f1.n,EndPoint,NE),
Ticks(scale(.7)*Label(align=W),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
Arrow,autorotate=false);
shipout(prefix="figure_1");
erase();
///////////////////////
// Figure 2
///////////////////////
draw(graph(f2.expr,f2.xmin,f2.xmax),red);
limits((f2.xmin,f2.ymin),(f2.xmax,f2.ymax),Crop);
xaxis(Label("$x$",EndPoint,NE),
Ticks(scale(.7)*Label(align=E),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
Arrow);
yaxis(Label(f2.n,EndPoint,NE),
Ticks(scale(.7)*Label(align=W),NoZero,Size=1mm, size=.5mm,pTick=black,ptick=gray),
Arrow,autorotate=false);
shipout(prefix="figure_2");
ou encore
Code : Tout sélectionner
add(courbefonction(f1,red).fit());
shipout(prefix="figure_1");
erase();
add(courbefonction(f2,blue).fit());
shipout(prefix="figure_2");
avec la fonction courbefonction du message précédent.
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 !