генерация случайного числа с определенным распределением в c - PullRequest
11 голосов
/ 05 сентября 2011

Мне нужна библиотека с функциями для генерации случайного числа, заданного среднего значения, стандартного отклонения и использования одного из трех распределений - экспоненциального, нормального или унифицированного.

даже один из трех поможет.я ищу что-то вроде этого - http://www.codeproject.com/KB/recipes/zigurat.aspx, но в.

спасибо

Ответы [ 2 ]

15 голосов
/ 05 сентября 2011

Могу ли я порекомендовать научную библиотеку GNU для использования или для вдохновения? Он имеет несколько случайных распределений чисел и предназначен для использования с C и C ++.

11 голосов
/ 05 сентября 2011

форма:
Генерация случайного числа в диапазоне [0,1] с равномерное распределение :

double X=((double)rand()/(double)RAND_MAX);

экспоненциальный
генерация экспоненциальной случайной величины с параметром лямбда:

-ln(U)/lambda (where U~Uniform[0,1]). 

нормальный
самый простой способ [хотя и трудоемкий] использовать центральную предельную теорему , [суммировать достаточно равномерно распределенные числа], но на странице википедии есть другие методы, такие как 1024 * преобразование Мюллера , которое генерирует 2 независимые случайные величины: X, Y ~ N (0,1)

X=sqrt(-2ln(U))*cos(2*pi*V)
Y=sqrt(-2ln(U))*sin(2*pi*V)
where U,V~UNIFORM[0,1]

преобразование из X ~ N (0,1) в Z ~ N (м, с ^ 2) просто: Z = s*X + m

Хотя вы МОЖЕТЕ сгенерировать эти случайные числа, я поддерживаю предложение @Amigable Clark Kant об использовании существующей библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...