С\С++ генератор СЧ из гауссовского распределения

Katrine

кому-нибудь приходилось генерировать случайные числа из гауссовского распределения на С? Поделитесь пожалуйста готовой функцией. Буду очень благодарен

griz_a

Не очень понял проблемы. А чем не угодил метод обратной функции?

Katrine

а что это за метод?

Lokomotiv59

Не очень понял проблемы. А чем не угодил метод обратной функции?
фтопку обратную функцию.
Проще сгенерировать N биномиальных независимых случайных величин. Их сумма даст нормальное распределение (N ~ 20 уже вполне хватает).

wolf-cub

Теорема Муавра-Лапласа?

kachokslava

В GSL искал?

griz_a

Да, наверное, я так сразу не срубил, что функция там не самая хорошая.
Только сумму надо отцентрировать и отнормировать.
В общем, надо сгенерировать 100 биномиальных чисед, сложить их и вычесть n*p и поделить на корень из np(1-p где p - параметр.
Можно легко оценить насколько получится ненормальная величина (довольно мало)

wolf-cub

а как можно это оценить? строить эмпирическую функцию распределения и сравнивать с теоретической, на графике?

Lokomotiv59

а как можно это оценить
а зачем, интересно знать ?
Большую погрешность, а главное — никак неучтенную, все равно внесет псведослучайность.

Lokomotiv59

Насчет кода, прав, лучше воспользоваться какой-нибудь стандартной реализацией.

wolf-cub

биномиальное распределение можно легко получить из равномерного, а это везде есть, на многих языках

Lokomotiv59

Спасибо, удивил.

demiurg

в gsl точно есть.gsl_ran_gaussian

Katrine

спасибо gimli и basilio - действительно нашел все необходимое в GSL !
остальным тоже спасибо за советы

wendy8

А вообще - на будущее.
Генерится 2 равномерных величины.
Из одной (X) методом обратной функции делается экспоненциальная.
Другая (Y) нормируется на [0; 2*pi)
После этого X*cos(Y) и X*sin(Y) - 2 независимых гауссовских сл.вел.
Оставить комментарий
Имя или ник:
Комментарий: