Мне нужно использовать в моей программе нормально распределенные случайные числа. Скажем, мне нужно сгенерировать x (размер R ^ (m x n)), элементы которого взяты из гауссовского распределения с нулевым средним и одной дисперсией. Как мне сделать это на C с хорошей точностью?
Как лучше всего сгенерировать нормально распределенные случайные числа в C?
comment
В этом ответе содержится код C, FWIW.
- person HostileFork says dont trust SE   schedule 24.10.2014
comment
c-faq.com/lib/gaussian.html
- person Grzegorz Szpetkowski   schedule 24.10.2014
comment
Обычно это делается с помощью преобразования Бокса-Мюллера.
- person Dietrich Epp   schedule 24.10.2014
Ответы (1)
Существует множество алгоритмов для получения нормального распределения, если у вас есть однородный генератор случайных чисел. Взгляните на этот раздел статьи в Википедии. Один из возможных подходов - использование центральной предельной теоремы. Подход здесь состоит в том, чтобы сгенерировать множество целочисленных значений с равномерным распределением, а затем вычислить их среднее арифметическое.
person
Ivaylo Strandjev
schedule
24.10.2014
Самый практичный подход? Требуется дюжина однородных выборок, чтобы получить одну переменную, которая имеет хотя бы примерно нормальное распределение, и гораздо больше, чтобы получить лучшие приближения. Не похоже, что метод Бокса-Мюллера особенно сложен. Для этого нужны только квадратный корень, логарифм и тригонометрия, то есть
libm
. Вероятно, даже больше строк кода.
- person ; 24.10.2014
@delnan на самом деле я не прочитал все предложенные идеи. Я просто проделал нечто подобное с центральной предельной теоремой. Перефразирую ответ.
- person Ivaylo Strandjev; 24.10.2014