somme de fonctions

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 !
zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: somme de fonctions

Message non lu par zariski » ven. 22 mars 2013, 23:46

Voilà ce que je souhaitais, c'est un peu tiré par les cheveux mais à priori ça fonctionne !

Figure asymptote 8817b4449066b8b26148469568b345ea
*** 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.  
  3. unitsize(1cm);
  4.  
  5. // Les axes///////////////////////////////////////////
  6. draw((-0.5,0)--(5,0),0.5bp+black,Arrow); //horiz
  7. draw((0,-1)--(0,8),0.5bp+black,Arrow); //vert
  8. //////////////////////////////////////////////////////
  9.  
  10.  
  11. //Graduations verticales/////////////
  12. label("$1$",(0,1),W);
  13. draw((-0.1,1)--(0.1,1));
  14.  
  15. label("$2$",(0,2),W);
  16. draw((-0.1,2)--(0.1,2));
  17.  
  18. label("$3$",(0,3),W);
  19. draw((-0.1,3)--(0.1,3));
  20.  
  21. label("$4$",(0,4),W);
  22. draw((-0.1,4)--(0.1,4));
  23.  
  24. label("$5$",(0,5),W);
  25. draw((-0.1,5)--(0.1,5));
  26.  
  27. label("$6$",(0,6),W);
  28. draw((-0.1,6)--(0.1,6));
  29.  
  30. ////////////////////////////////////
  31.  
  32.  
  33. //Graduations horizontales/////////
  34. label("$1$",(1,0),2S);
  35. draw((1,0.1)--(1,-0.1));
  36.  
  37. label("$2$",(2,0),2S);
  38. draw((2,0.1)--(2,-0.1));
  39.  
  40. label("$3$",(3,0),2S);
  41. draw((3,0.1)--(3,-0.1));
  42.  
  43. label("$4$",(4,0),2S);
  44. draw((4,0.1)--(4,-0.1));
  45. //////////////////////////////////
  46.  
  47.  
  48.  
  49. typedef real fonction_avec_parametre(real);
  50.  
  51. fonction_avec_parametre F(int k) {
  52. return new real(real x) {
  53. return
  54. 3+sum(sequence(new real(int m){
  55. return 12*(-1)^m*cos(((2*m+1)*2*pi*x)/4)/((2*m+1)*pi);
  56. },
  57. k));
  58. };
  59. }
  60.  
  61. draw(graph(F(5),0,4,300), 1bp+red);
  62.  
  63. shipout(bbox(0mm,white,FillDraw(rgb(0.86,0.90,0.80))));
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: somme de fonctions

Message non lu par GM » sam. 23 mars 2013, 07:21

  1. La première solution fonctionne... sous réserve de ne pas oublier qu'il faut un "format" par "%i".

    Code : Tout sélectionner

    import graph;

    unitsize(1cm);

    int n=15;
    string fx="3",sfx;
    for(int k=0; k<=n; ++k)
    {
    fx += format("+12*(-1)^%i",k)+format("*cos(((2*%i+1)*2*pi*x)/4)",k)+format("/((2*%i+1)*pi)",k);
    }
    write(fx);
    sfx = "real f(real x) { return "+fx+"; }";

    eval(sfx,true);

    draw(graph(f,0,4,300), 1bp + rgb(0,0,1));

  2. Et la seconde n'a rien de tiré par les cheveux : j'ai dit dans mon premier message que j'avais deux solutions en tête. ;-)
    J'avais retenu le choix qui me permettait de ré-évoquer "eval" dont on n'avais plus parlé depuis longtemps... avec l'idée d'avoir une chaine qui permettait aussi d'écrire l'expression sur la figure : mais pour ce dernier point... il est vrai que si cela allait avec la simple somme de x^k que tu donnais au départ... on manque un peu de place et c'est peu lisible avec celle qui a suivi. :mrgreen:

NB : je rappelle que \pi a sa notation pi qui évite le 3.14.
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 !

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: somme de fonctions

Message non lu par zariski » sam. 23 mars 2013, 09:15

Cette première solution ne manque pas d'ingéniosité, je prends !
Merci pour tout !
Bonne journée.
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: somme de fonctions

Message non lu par GM » sam. 23 mars 2013, 16:25

Une suggestion pour améliorer la solution 1 :

"format" est inutile puisque que finalement, on prend l'entier sans chercher à l'écrire sous une forme particulière.

Il sera avantageusement remplacé par ceci :

Code : Tout sélectionner

string K;
for(int k=0; k<=n; ++k)
{
   K=string(k);
   fx += "+12*(-1)^"+K+"*cos(((2*"+K+"+1)*2*pi*x)/4)/((2*"+K+"+1)*pi)";
}


On gagne en clarté du code.
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 !

Répondre