Получить нормальное распределение - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Подскажите с таким вопросом: насколько знаю, стандартные функции
Random.Next();
Random.NextDouble();
возвращают случайное, равномерно-распределенное число (в первом случае - просто, во втором - от 0 до 1). Возникла необходимость получить Нормально распределенную случайную величину с мат.ожиданием M и дисперсией D. Подскажите, как это можно реализовать при помощи стандартного рандома?

Решение задачи: «Получить нормальное распределение»

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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы