Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нормальное распределение случайной величины

63K
27 ноября 2010 года
AmazingS
4 / / 14.10.2010
Здравствуйте.
Хотелось бы узнать как можно на visual c# реализовать алгоритм генерации случайной величины распределенной по нормальноему закону Гаусса?
Спасибо
29K
27 ноября 2010 года
Енот_в_Засаде
224 / / 09.11.2010
А класс System.Random() - разве генерирует не по нормальному закону распределения?
62K
27 ноября 2010 года
Artyom2010
8 / / 02.09.2010
Подозреваю что скорее всего равномерное. Именно его большинство генераторов выдает. Ну проверить не так уж и сложно, да и в доках должно быть. Если вдруг равномерного, то есть 2 пути
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.)
Я бы предпочел второй вариант, ибо он, в независимости от того какое распределение у Вас было, даст нормальное. Нужно только сделать поправку на дисперсию и среднее полученного нормального распределения (оно не будет сразу же стандартным).
5
28 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Элементарно.
Нормальное распределение (близкое к нему) от 0 до 99:
 
Код:
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);
278
30 ноября 2010 года
Alexander92
1.1K / / 04.08.2008
А класс System.Random() - разве генерирует не по нормальному закону распределения?



На самом деле, ни один генератор псеводслучайных чисел вам четко нормальное распределение не сгенерирует. Просто действительно, очень верно была указана ссылка на центральную предельную теорему, благодаря ней можно большинство из них считать гауссовыми при больших N.

5
30 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Alexander92
На самом деле, ни один генератор псеводслучайных чисел вам четко нормальное распределение не сгенерирует.

А как же RNGCryptoServiceProvider? ;)

278
30 ноября 2010 года
Alexander92
1.1K / / 04.08.2008
Значит, к четвертому фреймворку уже добавили. :) Каюсь, не видел той ссылки, которую вы показали. Хотя вы сами наверняка знаете, что 99% алгоритмов генерации псевдослучайных чисел выдают не чисто случайные величины, что уже приводит к отклонению от Гаусса.
5
30 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Alexander92
Значит, к четвертому фреймворку уже добавили. :)


Он и в .NET 1.1 был вообще-то.

Цитата: Alexander92
Хотя вы сами наверняка знаете, что 99% алгоритмов генерации псевдослучайных чисел выдают не чисто случайные величины, что уже приводит к отклонению от Гаусса.

Не уверен насчет псевдослучайности этого генератора, но этот генератор считается надежным с криптографической точки зрения.

278
30 ноября 2010 года
Alexander92
1.1K / / 04.08.2008
Цитата: hardcase
Он и в .NET 1.1 был вообще-то.


Виноват, не заметил. Согласился.)

Цитата: hardcase

Не уверен насчет псевдослучайности этого генератора, но этот генератор считается надежным с криптографической точки зрения.


Это да, я имел в виду именно псевдослучайные. Наподобие System.Random, rand() в чистом Си и т.п.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог