Ответ 1
Следующий код не работает, так как некоторые значения превышают или превышают -1 и 1 (и не должны быть). Может ли кто-нибудь указать, что я делаю неправильно?
Нет, это неправильное понимание стандартного отклонения (второго параметра в конструкторе 1) нормального распределения.
Нормальное распределение - это привычная кривая колокола. Эта кривая эффективно говорит вам о распределении значений. Значения, близкие к тому, где пики колоколообразной кривой более вероятны, чем значения далеко (хвост распределения).
Стандартное отклонение сообщает вам, как распределены значения. Чем меньше число, тем более концентрированные значения находятся вокруг среднего значения. Чем больше число, тем менее концентрированные значения находятся вокруг среднего значения. На изображении ниже вы видите, что красная кривая имеет дисперсию (дисперсия - квадрат стандартного отклонения) 0,2. Сравните это с зеленой кривой, которая имеет такое же среднее значение, но с разницей в 1,0. Вы можете видеть, что значения в зеленой кривой более распределены относительно красной кривой. Фиолетовая кривая имеет дисперсию 5.0, а значения еще более разбросаны.
Итак, это объясняет, почему значения не ограничиваются [-1, 1]
. Интересно, однако, что 68% значений всегда находятся в пределах одного стандартного отклонения среднего значения. Итак, как интересный тест для себя, напишите программу, чтобы нарисовать большое количество значений из нормального распределения со средним 0 и дисперсией 1 и подсчитать число, которое находится в пределах одного стандартного отклонения среднего. Вы должны получить число, близкое к 68% (68.2689492137%, чтобы быть немного точнее).
1: От ускорения документация:
normal_distribution(RealType mean = 0, RealType sd = 1);
Создает нормальное распределение со средним средним и стандартным отклонением sd.