IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Mathématiques - Sciences Discussion :

Générer des nombres aléatoires


Sujet :

Mathématiques - Sciences

  1. #1
    Membre régulier
    Avatar de floyd973
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 140
    Points : 119
    Points
    119
    Par défaut Générer des nombres aléatoires
    bonjour tout le monde !!

    Même si je suis moins souvent connecté , ma formation latex continu. D'ailleurs en ce moment, je m'entraine à faire des exercices pour mes garçons ou je souhaite générer des nombres aléatoires entre 1 à 6 pour les inclure dans l'argument de la commande \psdice{nombre aléatoire}, pour avoir des faces de dés.
    J'ai l'impression que le package lcg n'est pas stable:
    Dans un premier temps, j'ai remarqué qu'il ne faut pas créer d'intervalles de compteurs identiques sinon les résultats générés sont identiques (voila pourquoi j'ai faceA{1,6} et faceB{2,5}
    Dans un second temps,je ne comprends pas pourquoi les résultats sont figés, c'est à dire qu'a chaque fois que je réinitialise par la touche F1, mes résultats n'évoluent plus, il y a une répétition des résultats générés. Essayer le code et vous comprendrez mieux ce que je veux dire.

    Connaissez vous un package permettant de générer des nombres aléatoires ?
    voici le code
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    \documentclass{article}
    \usepackage[french]{babel}
    \usepackage[T1]{fontenc}
    \usepackage[UTF8]{inputenc}
    \usepackage{boxedminipage}
    \usepackage{array,multirow,tabularx,diagbox,calc}
    \usepackage{graphicx, wrapfig}
    \usepackage[left=1.27cm, right=1.27cm, top=1.27cm, bottom=1.27cm]{geometry}
    \usepackage{eurosym}
    \usepackage{amsmath, amssymb, mathrsfs}
    \usepackage{lcg}
    \usepackage{pstricks-add}
     
     
    \parindent=0pt 
     
    \begin{document}
     
    \newcounter{A}
    \newcounter{B}
    \newcommand{\calcul}{%
    \reinitrand[first=1,last=6,counter=faceA]\rand%
    \reinitrand[first=2,last=5,counter=faceB]\rand%
    \setcounter{A}{\value{faceA}}%
    \setcounter{B}{\value{faceB}}%
    \psdice{\theA}\hspace{1cm} + \hspace{1cm} \psdice{\theB}\hspace{1cm}=\vspace{1cm}}
     
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
     
    \end{document}

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 344
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Ma solution n'est peut être pas optimale car elle implique de changer de compilateur pour utiliser LuaLaTeX mais elle est infiniment plus simple.

    Exemple (trouvé sur internet) :

    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
    \documentclass{article}
     
    % packages spéciaux pour LuaLaTeX
    % replace inputenc et fontspec
    \usepackage{fontspec}
    % quelques fonctions spéciales de LuaLaTeX
    \usepackage{luatextra}
     
    % document en français pour la forme
    \usepackage[french]{babel}
     
    % commande de génération d'un nombre aléatoire en faisant appel à Lua.
    \newcommand{\random}[2]{\luaexec{tex.print(math.random(#1,#2))}}
     
    \begin{document}
     
    	\og\random{10}{50}\fg\ est un nombre aléatoire entre 10 et 50 et en voici un autre: \og\random{10}{50}\fg.
     
    \end{document}
    Comme tu peux le voir, on peut générer plein de nombre aléatoires en même temps, ils ont des valeurs différentes (chose rare en informatique, l'aléatoire n'existe pas, le pseudo-aléatoire oui). L'inconvénient principal est qu'il faut apprendre Lua et adapter ses codes sources. Par contre, LuaLaTeX est l'avenir de pdfLaTeX, faire le changement maintenant ne peut être que bénéfique pour la suite
    La FAQ apporte souvent la solution aux problèmes
    Avant de demander de l'aide, pensez à faire un ECM ! Un problème bien expliqué est un problème à moitié résolu .

  3. #3
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Par contre, LuaLaTeX est l'avenir de pdfLaTeX, faire le changement maintenant ne peut être que bénéfique pour la suite
    Je ne peut qu'être d'accord (même si cela dérange quelques dinosaures qui ne jurent que par post script).

    Concernant le sujet originel. Il y a deux compteurs qui ne servent à rien dans le code fournit. En effet, dans ce code lcg défini deux compteurs faceA et faceB. Donc créer deux compteurs et leur affecter la valeur de faceA et faceB est une utilisation de ressources non nécessaires. Le code suivant est donc suffisant.
    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
    \documentclass{article}
    \usepackage{lcg}
    \usepackage{pstricks-add}
    \newcommand{\calcul}{%
    \chgrand[first=1,last=6,counter=faceA]\rand%
    \chgrand[first=1,last=6,counter=faceB]\rand%
    \psdice{\thefaceA}\hspace{1cm} + \hspace{1cm} \psdice{\thefaceB}\hspace{1cm}=\vspace{1cm}}
     
    \begin{document}
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
    \end{document}
    La génération de nombre pseudo-aléatoire par lcg est contrainte par la commande \time. Pour générer de nouveaux nombre pseudo aléatoires, il faut donc attendre une minute entre chaque compilation.
    Si tu as besoin de compiler sans attendre cette minute, j'ai une solution avec l'extension FP, avec une commande qui génère des nombres pseudo aléatoires. La ligne 3 permet de compiler sans devoir attendre.
    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
    23
    24
    \documentclass{article}
    \usepackage{fp}
    \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax
    \usepackage{pstricks-add}
    \def\nbalea#1{%   
        \FPrandom{\result}%
        \FPeval{\result}{\result*#1}%
        \FPround\result{\result}{0}%
        \edef\result{\number\numexpr\result+1}%
        }
    \newcommand{\calcul}{%
    \nbalea{6}\psdice{\result}\hspace{1cm} + \hspace{1cm} \nbalea{6}\psdice{\result}\hspace{1cm}=\vspace{1cm}}
     
    \begin{document}
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
    \end{document}

    Tu pourrais t'amuser à afficher le résultat du calcul sous forme d'un ou deux dés.

  4. #4
    Membre régulier
    Avatar de floyd973
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 140
    Points : 119
    Points
    119
    Par défaut
    oui , je suis un apprenti dinosaure qui ne jure que par pstricks! D'ailleurs c'est ce qui m'a charmé et m'a poussé à utiliser LaTex. Les schémas électriques offerts par pst-circ, les courbes dont l'ossature des codes pstricks, peuvent être générés par Géogébra, les assistants graphiques comme pst+ font que je ne peux qu'être enchanté. Surtout que j'ai vraiment du mal avec TIKZ dont je trouve que les codes sont beaucoup plus imposants que pstrick pour la réalisation d'un même dessin. Est ce qu Lualatex compile le code pstricks? En tout cas, je prends note de vos conseils, mais je vous avoue que je me perd entre le XeLatex et LuaLatex. Sur le net, il n'y a pas grands choses comme documentation sur les syntaxes....

    http://jobonne.org/luatest1.pdf J'ai ma réponse : "LuaLatex ne fonctionne pas ave Pstricks"

    Concernant le code:

    Effectivement, je me suis rendu compte que j'avais créé deux compteurs pour rien.

    Tu m'as fais comprendre qu'il fallait utiliser \chgrand pour ne pas que les valeurs des variables d'un intervalle aient un effet sur les autres intervalles :"The syntax of the command \chgrand is identical to \reinitrand. The difference is that \chgrand will set the specified keys but won't effect any other key. Ils appellent "keys" les bornes de l'intervalle ?Je ne suis pas très fort en anglais, j'avais pris l'option LV1 espagnol au lycée


    Du coups, je ne vois pas comment on peut se servir de la commande \reinitrand. " The effect is that specified keys will be set and all
    others will be reset to their standard values."

    Je vais essayer d'apprendre ton code (qui ressemble fortement à du langage Tex et auquel je ne suis pas habitué) pour la génération les nombres aléatoires sans attendre que la commande \time arrive à la fin de son cycle d'une minute. Encore une fois, je me demande comment tu fais pour mémoriser toutes ses informations.

    Merci beaucoup et à bientot

  5. #5
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    oui , je suis un apprenti dinosaure qui ne jure que par pstricks!
    ma remarque ne s'adressait pas à toi. Et PStricks pour faire des graphiques et des dessins est excellent. Certains même te diront qu'il est plus puissant que TikZ.

    Pour info géogebra génère du code TikZ est Dia l'est l'equivanlent de pst+ en TikZ (même auteur).

    Encore une fois, je me demande comment tu fais pour mémoriser toutes ses informations.
    je suis juste passionné et ça rentre tout seul

  6. #6
    Membre régulier
    Avatar de floyd973
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 140
    Points : 119
    Points
    119
    Par défaut
    Moi aussi j'en suis fou. J'ai juste hâte d'être en vacance pour passer plus de temps à me documenter!

  7. #7
    Membre régulier
    Avatar de floyd973
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 140
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par -Nikopol- Voir le message

    La génération de nombre pseudo-aléatoire par lcg est contrainte par la commande \time. Pour générer de nouveaux nombre pseudo aléatoires, il faut donc attendre une minute entre chaque compilation.
    Si tu as besoin de compiler sans attendre cette minute, j'ai une solution avec l'extension FP, avec une commande qui génère des nombres pseudo aléatoires. La ligne 3 permet de compiler sans devoir attendre.
    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
    23
    24
    \documentclass{article}
    \usepackage{fp}
    \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax
    \usepackage{pstricks-add}
    \def\nbalea#1{%   
        \FPrandom{\result}%
        \FPeval{\result}{\result*#1}%
        \FPround\result{\result}{0}%
        \edef\result{\number\numexpr\result+1}%
        }
    \newcommand{\calcul}{%
    \nbalea{6}\psdice{\result}\hspace{1cm} + \hspace{1cm} \nbalea{6}\psdice{\result}\hspace{1cm}=\vspace{1cm}}
     
    \begin{document}
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
     
    \calcul
    \end{document}
    Salut Nikopol !

    Ou as tu trouvée la documentation de l'extension {fp} stp ? elle n'est pas présente sur CTAN. J'essaie de comprendre l'emploi des commandes \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax \FPeval et \FPround etc...

  8. #8
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Ou as tu trouvée la documentation de l'extension {fp} stp ? elle n'est pas présente sur CTAN.
    T'as pas du chercher beaucoup ...

    http://www.ctan.org/tex-archive/macr...ex/contrib/fp/


    \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax permet de compiler sans devoir attendre une minute (à la base \fpseed est sur \time si je me souviens bien).
    \FPeval évalue un calcul et \FPround fait un arrondi.

  9. #9
    Membre régulier
    Avatar de floyd973
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 140
    Points : 119
    Points
    119
    Par défaut
    salut Nikopol

    Désolé, mais j'ai toujours chercher la doc en format pdf (mauvaises habitudes). Il me fallait juste ouvrir le fichier readme !

    Merci à toi !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer des nombres aléatoirement
    Par elghadi_mohamed dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2007, 12h15
  2. Réponses: 4
    Dernier message: 12/09/2006, 16h42
  3. Générer des nombres aléatoires
    Par nbeligh dans le forum C++
    Réponses: 6
    Dernier message: 05/09/2006, 16h05
  4. Algo pour générer des nombres aléatoires
    Par Admin dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 12/06/2006, 09h06
  5. Réponses: 2
    Dernier message: 16/05/2006, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo