2013-08-01 10 views
-1

J'ai besoin de connaître un moyen d'avoir une distribution gaussienne de 50 nombres. Je connais la bibliothèque Boost qui génère des nombres aléatoires. Dans mon cas, je n'ai pas besoin de hasard, j'ai besoin de la distribution normale de 50 numéros. Un moyen d'avoir ça? Merci.Fonction de distribution normale (gaussienne) en C++

+0

J'ai enlevé l'étiquette de pdf parce que la question n'est pas liée à pdf. – iPDFdev

+0

La fonction de densité de probabilité (PDF) est la distribution normale. – user2519605

Répondre

0

Si j'ai bien compris votre question, vous cherchez la distribution normale estimée, qui est pour la moyenne de l'échantillon et la variance de l'échantillon .

Le premier est calculé comme suit:

et celui-ci en tant que:

La moyenne de l'échantillon peut être utilisé en tant que valeur attendue et la variance de l'échantillon comme enter image description here dans la distribution gaussienne:

Si vous voulez plus d'information, consultez:

J'espère avoir répondu à votre question;)

1

Je pense que l'OP demandait un générateur de nombres aléatoires, dans lequel les nombres aléatoires ne sont pas distribués uniformément rand() en C) mais sont gaussiennes distribuées.

Cette courte routine adaptée de "Recettes numériques en C" (Press et al, 1992) peut être utile:

double grand() { 

    double r,v1,v2,fac; 

    r=2; 
    while (r>=1) { 
    v1=(2*((double)rand()/(double)RAND_MAX)-1); 
    v2=(2*((double)rand()/(double)RAND_MAX)-1); 
    r=v1*v1+v2*v2; 
    } 
    fac=sqrt(-2*log(r)/r); 

    return(v2*fac); 

} 

... assurer que les #includes pertinents sont présents pour les fonctions mathématiques et en rand , et que srand (temps (NULL)) ou similaire a été appelé à graine de manière appropriée le C rand() RNG.

+0

Quelle est la moyenne et l'écart-type de la distribution normale dans cette fonction? – Rasoul

+0

La moyenne est zéro et l'écart type est de un. :-) – jcollomosse

1

Au 11 C++ il y a une distribution normale (gaussienne) disponible dans la bibliothèque standard:

http://www.cplusplus.com/reference/random/normal_distribution/

La valeur moyenne et l'écart type sont passés comme arguments lors de sa création. Le lien ci-dessus fournit un bon exemple:

// normal_distribution 
#include <iostream> 
#include <random> 

int main() 
{ 
    const int nrolls=10000; // number of experiments 
    const int nstars=100; // maximum number of stars to distribute 

    std::default_random_engine generator; 
    std::normal_distribution<double> distribution(5.0,2.0); 

    int p[10]={}; 

    for (int i=0; i<nrolls; ++i) { 
    double number = distribution(generator); 
    if ((number>=0.0)&&(number<10.0)) ++p[int(number)]; 
    } 

    std::cout << "normal_distribution (5.0,2.0):" << std::endl; 

    for (int i=0; i<10; ++i) { 
    std::cout << i << "-" << (i+1) << ": "; 
    std::cout << std::string(p[i]*nstars/nrolls,'*') << std::endl; 
    } 

    return 0; 
} 
Questions connexes