Как я могу установить точки на 24-часовом периоде, распределенном по распределению Гаусса? Например, иметь пик в 10 часов?
Распределения Гаусса с PHP за 24-часовой период времени
comment
@Roel: стандартное отклонение не имеет значения, мне просто нужна логика PHP. Мы могли бы использовать что-то вроде 8.
- person powtac   schedule 30.09.2008
comment
Извините, я неправильно понял вопрос и удалил свой «ответ» (который изначально не был ответом). Извините за шум.
- person Roel   schedule 30.09.2008
comment
Я бы предложил проиллюстрировать то, что вам нужно, в виде php-функции — какие входные данные у вас есть, и что будет характеризовать успешный результат.
- person Paul Dixon   schedule 30.09.2008
Ответы (2)
Следующий код генерирует случайное время с распределением по Гауссу (в часах плюс доли часа) с центром в заданное время и с заданным стандартным отклонением. Случайное время может «охватывать» часы, особенно если стандартное отклонение составляет несколько часов: это обрабатывается правильно. Другой алгоритм «обертывания» может быть более эффективным, если ваши стандартные отклонения очень велики (много дней), но в любом случае распределение в этом случае будет почти равномерным.
$peak=10; // Peak at 10-o-clock
$stdev=2; // Standard deviation of two hours
$hoursOnClock=24; // 24-hour clock
do // Generate gaussian variable using Box-Muller
{
$u=2.0*mt_rand()/mt_getrandmax()-1.0;
$v=2.0*mt_rand()/mt_getrandmax()-1.0;
$s = $u*$u+$v*$v;
} while ($s > 1);
$gauss=$u*sqrt(-2.0*log($s)/$s);
$gauss = $gauss*$stdev + $peak; // Transform to correct peak and standard deviation
while ($gauss < 0) $gauss+=$hoursOnClock; // Wrap around hours to keep the random time
$result = fmod($gauss,$hoursOnClock); // on the clock
echo $result;
person
Chris Johnson
schedule
30.09.2008
Я думаю, что эта форма алгоритма называется «полярный метод Марсалья».
- person lapo; 21.11.2009
Если у вас возникли проблемы с генерацией случайных точек с распределением по Гауссу, посмотрите http://en.wikipedia.org/wiki/Box-Muller_transform
В противном случае, пожалуйста, уточните свой вопрос.
person
Mastermind
schedule
30.09.2008