Saltar al contenido

Genere números aleatorios siguiendo una distribución normal en C/C++

Mantén la atención ya que en este enunciado vas a hallar el hallazgo que buscas.Esta noticia fue analizado por nuestros especialistas para asegurar la calidad y exactitud de nuestro post.

Solución:

Hay muchos métodos para generar números distribuidos en Gauss a partir de un RNG regular.

La transformada de Box-Muller se usa comúnmente. Produce correctamente valores con una distribución normal. Las matemáticas son fáciles. Generas dos números aleatorios (uniformes), y al aplicarles una fórmula, obtienes dos números aleatorios normalmente distribuidos. Devuelva uno y guarde el otro para la próxima solicitud de un número aleatorio.

C++11

Ofertas de C++11 std::normal_distributionque es la forma en que iría hoy.

C o C++ anterior

Aquí hay algunas soluciones en orden de complejidad ascendente:

  1. Sume 12 números aleatorios uniformes del 0 al 1 y reste 6. Esto coincidirá con la media y la desviación estándar de una variable normal. Un inconveniente obvio es que el rango está limitado a ±6, a diferencia de un true distribución normal.

  2. La transformada de Box-Muller. Esto se menciona arriba y es relativamente simple de implementar. Sin embargo, si necesita muestras muy precisas, tenga en cuenta que la transformada Box-Muller combinada con algunos generadores uniformes sufre una anomalía llamada Efecto Neave.1.

  3. Para mayor precisión, sugiero dibujar uniformes y aplicar la distribución normal acumulativa inversa para llegar a variables normalmente distribuidas. Aquí hay un muy buen algoritmo para distribuciones normales acumulativas inversas.

1. HR Neave, “Sobre el uso de la transformación Box-Muller con generadores de números pseudoaleatorios congruentes multiplicativos”, Applied Statistics, 22, 92-97, 1973

Un método rápido y fácil es simplemente sumar una cantidad de números aleatorios distribuidos uniformemente y tomar su promedio. Consulte el Teorema del límite central para obtener una explicación completa de por qué funciona.

Te mostramos las comentarios y valoraciones de los lectores

Tienes la opción de añadir valor a nuestro contenido dando tu experiencia en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *