У меня есть равномерно сгенерированные случайные числа. Теперь я хочу генерировать случайные числа, используя распределение Гаусса (нормальное). Я не знаю среднего и стандартного отклонения. Я прочитал эту статью: http://www.johndcook.com/cpp_TR1_random.html#normal, но это требует среднего и стандартного отклонения! Я также знаю, что обычно используется преобразование Бокса-Мюллера. Это правильно дает значения с нормальным распределением. но опять же я не знаю среднего и стандартного отклонения. Никакого повышения, пожалуйста. Кто-нибудь может помочь, пожалуйста?
Распределение Гаусса с использованием C ++ без среднего и стандартного отклонения
Ответы (1)
Когда вы генерируете равномерно распределенные (в сегменте) случайные числа, вам нужны два параметра: нижняя граница сегмента и верхняя граница сегмента. Обычно это 0 и 1 соответственно, поэтому вы получаете числа из диапазона [0..1]
.
Теперь, чтобы сгенерировать нормально распределенные числа, вам также понадобятся два параметра: среднее значение и стандартное отклонение. Однако они имеют другое значение. Среднее - это число, вокруг которого будут собираться ваши сгенерированные числа: если вы укажете, скажем, 15, вы, вероятно, увидите 11, 17, 13, 21, 9, 12, 14, 11 и т. Д., Но не (обычно) 290. или -562. А стандартное отклонение (сигма) в основном определяет, насколько далеко сгенерированные числа могут отклоняться от среднего. Строго говоря, может быть сгенерировано число любой величины: даже если вы укажете среднее значение 0 и сигму 1e-6
, вы все равно можете получить 1000, но это маловероятно.
Как показывает практика, почти все сгенерированные числа будут находиться в [mean - 3 * sigma .. mean + 3 * sigma]
диапазоне, и держу пари, что вы не увидите ничего за пределами [mean - 5 * sigma .. mean + 5 * sigma]
диапазона в своей жизни.
Существует понятие «стандартного» нормального распределения: со средним значением = 0, сигма = 1. Это означает, что вы получите числа в основном в диапазоне [-3..3]
.
Надеюсь, это немного поможет!