Распределения Гаусса с PHP за 24-часовой период времени

Как я могу установить точки на 24-часовом периоде, распределенном по распределению Гаусса? Например, иметь пик в 10 часов?


person powtac    schedule 30.09.2008    source источник
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
comment
Я думаю, что эта форма алгоритма называется «полярный метод Марсалья». - person lapo; 21.11.2009

Если у вас возникли проблемы с генерацией случайных точек с распределением по Гауссу, посмотрите http://en.wikipedia.org/wiki/Box-Muller_transform

В противном случае, пожалуйста, уточните свой вопрос.

person Mastermind    schedule 30.09.2008