var max = 100;
var rnd = new Random();
var x = (int)((rnd.Next(max) + rnd.Next(max) + rnd.Next(max)
+ rnd.Next(max) + rnd.Next(max) + rnd.Next(max)) / 6.0f);
Нормальное распределение случайной величины
Хотелось бы узнать как можно на visual c# реализовать алгоритм генерации случайной величины распределенной по нормальноему закону Гаусса?
Спасибо
А класс System.Random() - разве генерирует не по нормальному закону распределения?
1. Воспользоваться хитрым преобразованием и получить нормальное.
(см. например здесь http://ru.w3support.net/index.php?db=so&id=75677)
2. Воспользоваться центральной предельной теоремой (http://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0) и получить нормальное распределение.
(см. например здесь http://www.rsdn.ru/forum/alg/1513899.flat.aspx.)
Я бы предпочел второй вариант, ибо он, в независимости от того какое распределение у Вас было, даст нормальное. Нужно только сделать поправку на дисперсию и среднее полученного нормального распределения (оно не будет сразу же стандартным).
Нормальное распределение (близкое к нему) от 0 до 99:
Код:
Цитата: Енот_в_Засаде
А класс System.Random() - разве генерирует не по нормальному закону распределения?
На самом деле, ни один генератор псеводслучайных чисел вам четко нормальное распределение не сгенерирует. Просто действительно, очень верно была указана ссылка на центральную предельную теорему, благодаря ней можно большинство из них считать гауссовыми при больших N.
Цитата: Alexander92
На самом деле, ни один генератор псеводслучайных чисел вам четко нормальное распределение не сгенерирует.
А как же RNGCryptoServiceProvider? ;)
Значит, к четвертому фреймворку уже добавили. :) Каюсь, не видел той ссылки, которую вы показали. Хотя вы сами наверняка знаете, что 99% алгоритмов генерации псевдослучайных чисел выдают не чисто случайные величины, что уже приводит к отклонению от Гаусса.
Цитата: Alexander92
Значит, к четвертому фреймворку уже добавили. :)
Он и в .NET 1.1 был вообще-то.
Цитата: Alexander92
Хотя вы сами наверняка знаете, что 99% алгоритмов генерации псевдослучайных чисел выдают не чисто случайные величины, что уже приводит к отклонению от Гаусса.
Не уверен насчет псевдослучайности этого генератора, но этот генератор считается надежным с криптографической точки зрения.
Цитата: hardcase
Он и в .NET 1.1 был вообще-то.
Виноват, не заметил. Согласился.)
Цитата: hardcase
Не уверен насчет псевдослучайности этого генератора, но этот генератор считается надежным с криптографической точки зрения.
Это да, я имел в виду именно псевдослучайные. Наподобие System.Random, rand() в чистом Си и т.п.