Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Gestion variables dans multido
    Bonjour à tous,

    Je veux placer des points sur un graphique à l'aide de la boucle multido.

    Pour cela j'ai besoin de créer une nouvelle variable à partir de la somme et de la multiplication d'autres variables :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    \def\tn{\t+\n*\h}


    Il faudrai aussi que j'arrive à mettre dans une variable le résultat d'une fonction avec des exponentielles pour un x donné :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    \def\xt{\xt+\h*(\K*EXP(-\xt))/((\K*EXP(-\xt)+1)^2)}


    J'ai essayé pas mal de choses mais rien n'y fait pour le moment.
    Si quelqu'un peut m'aiguiller ce serai top

  2. #2
    Membre actif
    J'ai pas compris exactement ce que tu voulais faire et ce qu'étaient toutes ces variables. Avec un vrai ecm ça serait mieux.

    Mais plus généralement, tu ne peux pas faire un \def\x{quelque chose qui utilise \x}. Donc dans ton cas tu ne peux pas appeler ta commande \xt comme ça. A la limite tu peux l'appeler \yt

  3. #3
    Candidat au Club
    Merci pour ta réponse.

    Voici l'ECM complet :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    \def\t{0}
    \def\xt{1}
    \def\h{1}
    \def\K{1}
     
    %On place le point correspondant aux conditions initiales
    \psdots[linecolor=red,dotscale=1,dotstyle=*](\t,\xt)
     
    \multido{\n=0+1}{10}{
     
    \def\tn{\t+\n*\h}
    \def\xt=\xt+h*(\K*EXP(-\xt))/((\K*EXP(-\xt)+1)^2)
    \psdots[linecolor=red,dotscale=1,dotstyle=*](\tn,\xt)}


    Pour éviter de définir une variable en l'utilisant elle-même (par exemple x = x +1), je dois passer par une autre variable ( x = y puis x = y+1 ) ?

  4. #4
    Responsable LaTeX

    Bonsoir, je ne me sers jamais de multido, mais la variable \n ne s'incrémente elle pas toute seule?
    Je pense que l'utilisation de la boucle est erroné ici, je vais regardé, mais j'etais parti pour répondre au message précédent et donc aussi au x=x+1.

    tu ne peux pas faire un \def\x{quelque chose qui utilise \x}
    @lulzec, Je sais que tu le sais mais on peut passer par un \edef ou même \let
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    \def\toto{0}
    \edef\toto{\number\numexpr\toto+1}
    \toto
    \def\tata{truc}
    \let\oldtata\tata
    \def\tata{\textbf{\oldtata}}
    \tata

    pour info pour le PO, mais je pense qu'il vaut mieux corriger le multido.
    Développeur Web freelance : http://www.ls-web.fr

  5. #5
    Responsable LaTeX

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    \multido{\n=0+1}{10}{
     
    \def\tn{\t+\n*\h}
    \def\xt=\xt+h*(\K*EXP(-\xt))/((\K*EXP(-\xt)+1)^2)
    \psdots[linecolor=red,dotscale=1,dotstyle=*](\tn,\xt)}

    Dans ce code \tn n'est pas évalué (ça ça peut s'arranger). de plus les \h et\k ne sont pas incrémenté (ou autre) donc restent à 1. donc dur d'imaginer ce que c'est sensé produire.
    Développeur Web freelance : http://www.ls-web.fr

  6. #6
    Membre actif
    Non mais en vrai, je crois qu'on ne peut pas écrire d'expression arithmétique directement avec psdot. Du coup c'est mieux avec le package fp pour faire des calculs dans ce cas

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    \documentclass{article}
     
     
    \usepackage{pstricks-add, multido, fp}
    \begin{document}
     
    \begin{pspicture}
    \FPeval\t{0}
    \FPeval\xt{1}
    \FPeval\h{1}
    \FPeval\K{1}
    %On place le point correspondant aux conditions initiales
    \psdot[linecolor=red,dotscale=1,dotstyle=*](\t,\xt)
     
    \multido{\n=0+1}{10}{
    	\FPeval\tn{t + n * h}
    	\FPeval\xt{xt + h * (K * exp(-xt)) / (K * exp(-xt) + 1)^2}
    	\psdot[linecolor=red,dotscale=1,dotstyle=*](\tn,\xt)
    }
    \end{pspicture}
     
    \end{document}


    Alors par contre j'aimerais bien savoir ce que tu veux faire. Parce que c'est vraiment bizarre. On dirait une sorte de dérivée discrète ou un truc du genre mais bon... Ça m'intrigue

  7. #7
    Candidat au Club
    Citation Envoyé par -Nikopol- Voir le message
    Dans ce code \tn n'est pas évalué (ça ça peut s'arranger). de plus les \h et\k ne sont pas incrémenté (ou autre) donc restent à 1. donc dur d'imaginer ce que c'est sensé produire.
    Je les ai déclaré au début car ce sont deux paramètres sur lesquels je vais pouvoir "jouer" une fois que tout marchera. C'est pour ca que je les déclare au début, ils seront plus accessible !


    Alors par contre j'aimerais bien savoir ce que tu veux faire. Parce que c'est vraiment bizarre. On dirait une sorte de dérivée discrète ou un truc du genre mais bon... Ça m'intrigue
    En fait je souhaite utiliser la méthode d'Euler pour tracer ma fonction x(t) solution de l'équation logistique de Verhulst.
    h représente donc mon pas, qui pour le moment est à 1 mais que je modifierai selon la précision que je souhaite avoir.
    K lui dépend de la condition initiale choisit. Je souhaite étudier la fonction pour différentes conditions initiales, c'est pour ca que je le laisse apparaitre dans ma fonction.

    En tout cas merci pour vos réponses. Je testerai demain ce que tu m'as proposé lulzec et reviendrai vers vous

  8. #8
    Membre actif
    En fait je souhaite utiliser la méthode d'Euler pour tracer ma fonction x(t) solution de l'équation logistique de Verhulst.
    Bizarre, je croyais que c'était plutôt une équation du genre
    [latex]\frac{\mathrm dx}{\mathrm dt} = ax\left( 1 - \frac{x}{K}\right)[/latex]
    et pas
    [latex]\frac{\mathrm dx}{\mathrm dt} = \frac{K\exp(-x)}{(K\exp(-x)+1)^2}[/latex]

    Mais bon, soit !

  9. #9
    Candidat au Club
    Citation Envoyé par lulzec Voir le message
    Bizarre, je croyais que c'était plutôt une équation du genre
    [latex]\frac{\mathrm dx}{\mathrm dt} = ax\left( 1 - \frac{x}{K}\right)[/latex]
    et pas
    [latex]\frac{\mathrm dx}{\mathrm dt} = \frac{K\exp(-x)}{(K\exp(-x)+1)^2}[/latex]

    Mais bon, soit !
    Tu as raison, je me suis un peu emmêlé les pinceaux.



    Citation Envoyé par lulzec Voir le message
    Non mais en vrai, je crois qu'on ne peut pas écrire d'expression arithmétique directement avec psdot. Du coup c'est mieux avec le package fp pour faire des calculs dans ce cas

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    \documentclass{article}
     
     
    \usepackage{pstricks-add, multido, fp}
    \begin{document}
     
    \begin{pspicture}
    \FPeval\t{0}
    \FPeval\xt{1}
    \FPeval\h{1}
    \FPeval\K{1}
    %On place le point correspondant aux conditions initiales
    \psdot[linecolor=red,dotscale=1,dotstyle=*](\t,\xt)
     
    \multido{\n=0+1}{10}{
    	\FPeval\tn{t + n * h}
    	\FPeval\xt{xt + h * (K * exp(-xt)) / (K * exp(-xt) + 1)^2}
    	\psdot[linecolor=red,dotscale=1,dotstyle=*](\tn,\xt)
    }
    \end{pspicture}
     
    \end{document}


    Ca m'a l'air de fonctionner ce code... Il faut donc utiliser le package fp avec la "fonction" \FPeval pour définir une variable à partir d'autres variables ?

  10. #10
    Membre actif
    Citation Envoyé par Adriano75015 Voir le message
    Ca m'a l'air de fonctionner ce code... Il faut donc utiliser le package fp avec la "fonction" \FPeval pour définir une variable à partir d'autres variables ?
    Bah fp ça permet de faire des calculs facilement. Sinon latex est un peu nul pour calculer.

    Au passage, on a des solutions exactes pour ton équation, t'es pas obligé d'utiliser la méthode d'Euler pour l'approximer

  11. #11
    Candidat au Club
    Citation Envoyé par lulzec Voir le message
    Bah fp ça permet de faire des calculs facilement. Sinon latex est un peu nul pour calculer.
    Mouai c'est bien ce que je commence à comprendre. En tout cas fp me permet de faire ce que je veux pour le moment.


    Au passage, on a des solutions exactes pour ton équation, t'es pas obligé d'utiliser la méthode d'Euler pour l'approximer
    En fait cet exercice est un "préambule" pour bien comprendre la méthode d'Euler et réussir à faire une simulation numérique.
    Il faudra ensuite que je l'applique sur un problème un peu plus complexe. J'aurai certainement l'occasion de revenir vers vous à ce moment là.

    En tout cas merci pour votre réactivité c'est très pratique !

  12. #12
    Responsable LaTeX

    - Bah fp ça permet de faire des calculs facilement. Sinon latex est un peu nul pour calculer.
    -Mouai c'est bien ce que je commence à comprendre.
    Faites attention ! si vous continuez comme ça tous les deux je vais vous envoyer faire un tour sur le forum word

    Plus sérieusement, pgfplot est à regarder de près pour ce genre de courbes il est aisé de faire des choses sympa comme ceci :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    \documentclass{article}
    \usepackage{pgfplots,tikz}
    \begin{document}
      \begin{tikzpicture}
          \begin{axis}[title={\textbf{Surface plot}}]
          \addplot3[surf,domain=0:360,samples=40]
          {sin(x)*sin(y)};
          \end{axis}
     \end{tikzpicture}
    \end{document}


    Développeur Web freelance : http://www.ls-web.fr

  13. #13
    Membre actif
    Citation Envoyé par -Nikopol- Voir le message
    Faites attention ! si vous continuez comme ça tous les deux je vais vous envoyer faire un tour sur le forum word


    Oui oui je suis tout à fait d'accord pour utiliser pgf, mais là on voulait tracer avec pstricks, et j'avoue que je ne connais pas vraiment de moyen plus facile que fp dans ce cas pour faire des calculs

###raw>template_hook.ano_emploi###