usar tabla normal estandar ejemplos distribucion como caracteristicas calcular aplicaciones c++ boost statistics normal-distribution

c++ - tabla - distribucion normal formula



¿Cómo utilizar las clases de distribución normal? (2)

Intento utilizar boost :: normal_distribution para generar una distribución normal con media 0 y sigma 1.

El siguiente código no funciona, ya que algunos valores van más allá de -1 y 1 (y no deberían serlo). ¿Podría alguien señalar lo que estoy haciendo 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; } }

El resultado en mi máquina es:

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

Como puede ver, todos los valores no están entre -1 y 1.

¡Gracias a todos de antemano!

EDITAR : Esto es lo que sucede cuando tienes fechas límite y evitas estudiar la teoría antes de hacer la práctica.


El siguiente código no funciona, ya que algunos valores van más allá de -1 y 1 (y no deberían serlo). ¿Podría alguien señalar lo que estoy haciendo mal?

No, esto es un malentendido de la desviación estándar (el segundo parámetro en el constructor 1 ) de la distribución normal.

La distribución normal es la curva de campana familiar. Esa curva efectivamente te dice la distribución de los valores. Los valores cercanos a los picos de la curva de campana son más probables que los valores lejanos (la cola de la distribución).

La desviación estándar te dice qué tan separados están los valores. Cuanto menor es el número, más valores concentrados están alrededor de la media. Cuanto mayor es el número, menos valores concentrados están alrededor de la media. En la imagen siguiente, verá que la curva roja tiene una varianza (la varianza es el cuadrado de la desviación estándar) de 0.2. Compare esto con la curva verde que tiene la misma media pero con una varianza de 1.0. Puede ver que los valores en la curva verde están más extendidos en relación con la curva roja. La curva púrpura tiene una varianza de 5.0 y los valores están aún más dispersos.

Entonces, esto explica por qué los valores no están confinados a [-1, 1] . Sin embargo, es un hecho interesante que el 68% de los valores están siempre dentro de una desviación estándar de la media. Entonces, como una prueba interesante para usted, escriba un programa para dibujar una gran cantidad de valores de una distribución normal con media 0 y varianza 1 y cuente el número que está dentro de una desviación estándar de la media. Debería obtener un número cercano al 68% (68.2689492137% para ser un poco más preciso).

1 : de la documentation impulso:

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

Construye una distribución normal con media ± desviación estándar y desviación estándar


No estás haciendo nada mal. Para una distribución normal, sigma especifica la desviación estándar, no el rango. Si genera suficientes muestras, verá que solo alrededor del 68% de ellas se encuentran en el rango [media - sigma, media + sigma], aproximadamente 95% dentro de 2 sigma y más de 99% dentro de 3 sigma.