Saltar al contenido

Variables gaussianas aleatorias

Queremos regalarte la mejor respuesta que hallamos en todo internet. Esperamos que te sirva de ayuda y si puedes compartir algo que nos pueda ayudar a perfeccionar nuestra información hazlo con total libertad.

Solución:

La sugerencia de Jarrett de usar una transformación Box-Muller es buena para una solución rápida y sucia. Una implementación sencilla:

Random rand = new Random(); //reuse this if you are generating many
double u1 = 1.0-rand.NextDouble(); //uniform(0,1] random doubles
double u2 = 1.0-rand.NextDouble();
double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) *
             Math.Sin(2.0 * Math.PI * u2); //random normal(0,1)
double randNormal =
             mean + stdDev * randStdNormal; //random normal(mean,stdDev^2)

Esta pregunta parece haberse trasladado a la parte superior de Google para la generación gaussiana de .NET, así que pensé en publicar una respuesta.

Creé algunos métodos de extensión para la clase .NET Random, incluida una implementación de la transformación Box-Muller. Dado que son extensiones, siempre que se incluya el proyecto (o haga referencia a la DLL compilada), aún puede hacer

var r = new Random();
var x = r.NextGaussian();

Espero que a nadie le importe el enchufe desvergonzado.

Ejemplo de histograma de resultados (se incluye una aplicación de demostración para dibujar esto):

ingrese la descripción de la imagen aquí

Math.NET proporciona esta funcionalidad. Así es cómo:

double mean = 100;
double stdDev = 10;

MathNet.Numerics.Distributions.Normal normalDist = new Normal(mean, stdDev);
double randomGaussianValue=   normalDist.Sample();

Puede encontrar documentación aquí: http://numerics.mathdotnet.com/api/MathNet.Numerics.Distributions/Normal.htm

Comentarios y valoraciones del tutorial

Si te gustó nuestro trabajo, puedes dejar un ensayo acerca de qué te ha gustado de este enunciado.

¡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 *