Получить нормальное распределение - C#
Формулировка задачи:
Добрый день.
Подскажите с таким вопросом:
насколько знаю, стандартные функции
возвращают случайное, равномерно-распределенное число (в первом случае - просто, во втором - от 0 до 1).
Возникла необходимость получить Нормально распределенную случайную величину с мат.ожиданием M и дисперсией D. Подскажите, как это можно реализовать при помощи стандартного рандома?
Random.Next(); Random.NextDouble();
Решение задачи: «Получить нормальное распределение»
textual
Листинг программы
using System; using System.Linq; namespace ConsoleApplication31 { class Program { static void Main(string[] args) { double[] arr = new double[10000]; var rand = new ZRandom(); for (int i = 0; i < arr.Length; i++) { arr[i] = rand.Next(10, 2); } var mx = arr.Average(); var v2 = arr.Select(x => x * x).Average(); var dx = v2 - mx * mx; var stddev = Math.Sqrt(dx); Console.WriteLine("Mx = " + mx); Console.WriteLine("StdDev = " + stddev); } } public class ZRandom { private Random _random = new Random(); private double _z1 = double.NegativeInfinity; public double Next() { double result; if (!double.IsNegativeInfinity(_z1)) { result = _z1; _z1 = double.NegativeInfinity; } else { double x, y, s; do { x = _random.NextDouble()*2 - 1; y = _random.NextDouble()*2 - 1; s = x*x + y*y; } while (s <= 0 || s > 1); result = x*Math.Sqrt(-2.0*Math.Log(s)/s); _z1 = y*Math.Sqrt(-2.0*Math.Log(s)/s); } return result; } public double Next(double mean, double stddev) { return Next()*stddev + mean; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д