【问题标题】:Gaussian distributions with PHP on a 24h time periodPHP 在 24 小时内的高斯分布
【发布时间】:2010-09-14 04:56:34
【问题描述】:

如何在高斯分布分布的 24 小时周期内设置点?比如10点有高峰?

【问题讨论】:

  • @Roel:标准差无关紧要,我只需要 PHP 逻辑。我们可以使用类似 8 的东西。
  • 抱歉,我误解了这个问题,并删除了我的“答案”(这本来就不是答案)。为噪音道歉。
  • 我建议以 php 函数的形式说明您需要什么 - 您有哪些可用输入,以及成功输出的特征。

标签: php math gaussian


【解决方案1】:

以下代码生成以给定时间为中心且具有给定标准偏差的高斯分布随机时间(以小时为单位,加上一小时的几分之一)。随机时间可能会“环绕”时钟,特别是如果标准偏差是几个小时:这是正确处理的。如果您的标准偏差非常大(很多天),则不同的“包装”算法可能会更有效,但无论如何,在这种情况下分布几乎是均匀的。

$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;

【讨论】:

  • 我认为这种形式的算法称为“Marsaglia极坐标法”。
【解决方案2】:

如果您在生成高斯分布随机点时遇到问题,请查看http://en.wikipedia.org/wiki/Box-Muller_transform

另外,请澄清您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多