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

C Discussion :

[Statistiques] Générer une loi normale


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut [Statistiques] Générer une loi normale
    Bonjour,

    Je cherche comment générer un nombre aléatoire, en C/C++, suivant une loi normale N(mu ,sig)

    Merci par avance.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mhtrinh
    Je cherche comment générer un nombre aléatoire, en C/C++, suivant une loi normale N(mu ,sig)
    Tu as l'algo ?

    Si oui, code le et poste ton code si tu as un problème.
    Sinon : Algorithmes

  3. #3
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut
    Je pensais qu'il existait une librairie qui faisait cela ...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 40
    Points : 37
    Points
    37
    Par défaut
    Si je me trompe pas l'algo est décrit dans les numerical recipes.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, pour tirer une loi normale (mu,sig), tu dois tirer une variable aléatoire X suivant la loi normale centrée réduite et ensuite tu pose Y=sig*X+mu

    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
     
    /* 
       RAND is a macro which returns a pseudo-random numbers from a uniform
       distribution on the interval [0 1]
    */
    #define RAND ((double) rand())/((double) RAND_MAX)
     
    /*
       TWOPI = 2.0*pi
    */
    #define TWOPI 2.0*3.141592653589793238462643383279502884197169399375
     
    /* 
       RANDN is a macro which returns a pseudo-random numbers from a normal
       distribution with mean zero and standard deviation one. This macro uses Box
       Muller's algorithm
    */
    #define RANDN sqrt(-2.0*log(RAND))*cos(TWOPI*RAND)
     
     
    double NormalDistribution(double mu,double sigma)
    {
    /*
       This function returns a pseudo-random numbers from a normal distribution with
       mean equal at mu and standard deviation equal at sigma > 0
    */
      if(sigma<=0.0)
      {
        fprintf(stderr,"Error in file %s line %u function %s : sigma must be > 0\nExit program\n",__FILE__,__LINE__,__FUNCTION__);
        exit(EXIT_FAILURE);
      }
     
      return (mu+sigma*RANDN);
     
    }

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par viddak
    Si je me trompe pas l'algo est décrit dans les numerical recipes.
    En effet, et ces braves gens donnent meme le code source ici, chapitre 7.

  7. #7
    Membre habitué
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Points : 129
    Points
    129
    Par défaut
    Super !! c'est ce que je voulais.

    Merci beaucoup tout le monde !!!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2011, 12h48
  2. Passer d'une loi Uniforme à une loi Normale
    Par chloe28 dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2011, 00h16
  3. Réponses: 6
    Dernier message: 24/03/2010, 17h22
  4. test d'ajustement à une loi normale
    Par ricololo dans le forum Statistiques, Data Mining et Data Science
    Réponses: 0
    Dernier message: 25/09/2008, 21h00
  5. Réponses: 3
    Dernier message: 05/07/2007, 00h13

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