Question

Je suis en train d'utiliser boost :: normal_distribution afin de générer une distribution normale avec une moyenne 0 et sigma 1.

Le code suivant ne fonctionne pas comme certaines valeurs sont au-dessus ou au-delà de -1 et 1 (et ne doit pas être). Pourrait-il indiquer someont ce que je fais mal?

#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>

int main()
{
  boost::mt19937 rng; // I don't seed it on purpouse (it's not relevant)

  boost::normal_distribution<> nd(0.0, 1.0);

  boost::variate_generator<boost::mt19937&, 
                           boost::normal_distribution<> > var_nor(rng, nd);

  int i = 0; for (; i < 10; ++i)
  {
    double d = var_nor();
    std::cout << d << std::endl;
  }
}

Le résultat sur ma machine est:

0.213436
-0.49558
1.57538
-1.0592
1.83927
1.88577
0.604675
-0.365983
-0.578264
-0.634376

Comme vous pouvez voir toutes les valeurs ne sont pas entre -1 et 1.

Merci à vous tous à l'avance!

EDIT :. Voici ce qui se passe lorsque vous avez des délais et éviter d'étudier la théorie avant de faire la pratique

Était-ce utile?

La solution

  

Le code suivant ne fonctionne pas comme certaines valeurs sont au-dessus ou au-delà de -1 et 1 (et ne doit pas être). Pourrait-il indiquer someont ce que je fais mal?

Non, ceci est une erreur de l'écart-type (le deuxième paramètre du constructeur 1 ) de la distribution normale.

La distribution normale est la courbe en cloche familier. Cette courbe vous indique efficacement la distribution des valeurs. Les valeurs proches de l'endroit où les pics de la courbe de cloche sont plus susceptibles que les valeurs loin (la queue de la distribution).

L'écart-type vous indique comment Déployez les valeurs. Plus le nombre, les valeurs plus concentrées sont autour de la moyenne. Plus le nombre, les valeurs sont moins concentrées autour de la moyenne. Dans l'image ci-dessous voir que la courbe rouge a une variance (variance est le carré de l'écart type) de 0,2. Comparez cela à la courbe verte qui a la même moyenne, mais un écart de 1,0. Vous pouvez voir que les valeurs de la courbe verte sont plus dispersés par rapport à la courbe rouge. La courbe violette a une variance 5,0 et les valeurs sont encore plus étendu.

Alors, ce qui explique pourquoi les valeurs ne se limitent pas à [-1, 1]. Il est cependant intéressant de noter que 68% des valeurs sont toujours dans un écart-type de la moyenne. Alors, comme un test intéressant pour vous écrire un programme pour dessiner un grand nombre de valeurs d'une distribution normale avec une moyenne 0 et de variance 1 et compter le nombre qui sont dans un écart type de la moyenne. Vous devriez obtenir un numéro près de 68% (68,2689492137% d'être un peu plus précis).

text alt

1 : De l'impulsion documentation :

  

normal_distribution(RealType mean = 0, RealType sd = 1);

     

Les constructions d'une distribution normale de moyenne moyenne et l'écart-type SD.

Autres conseils

Tu ne fais rien de mal. Pour une distribution normale, sigma spécifie la norme déviation, non comprise. Si vous générez suffisamment d'échantillons, vous verrez que seulement 68% d'entre elles se situent dans la plage [moyenne - sigma, sigma signifie +], environ 95% à moins de 2 sigma, et plus de 99% à moins de 3 sigma.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top