5

我正在尝试实现Box-Muller 变换以生成具有高斯分布的伪随机数。显然,此方法仅生成具有 sigma 1 和均值 0 的数字。如何使用它生成具有任意 sigma 和均值的数字?

4

3 回答 3

12

不需要单独的方法。统计学的一个众所周知的结果是,您可以通过简单的转换在标准正态(高斯)值 Z 到具有平均 mu 和标准偏差 sigma 的一般高斯 X 之间来回转换X = sigma*Z + mu,反之亦然Z = (x - mu)/sigma。这就是为什么统计书籍只需要/提供一张高斯分布表的原因。

于 2013-08-04T19:20:55.027 回答
2

Box-Muller 生成具有单位方差的分布,因此对您的问题的简短回答是:您不使用 Box-Muller 生成具有任意 sigma 的数字。

然而,长答案更明确。这是一篇带有修改后的 Box-Muller 算法的论文,该算法支持任意方差。这很简单。

至于意思,那很容易。只需将平均值添加到您的结果中。

归结为李丹尼尔克罗克在评论中提到的内容;乘以 sigma 并加上平均值。

于 2013-08-04T03:17:48.347 回答
0
public function genererNombreLoiNormale($mu, $sigma) {

    // On récupère deux nombres pseudo-aléatoires indépendants selon une loi uniforme sur l'intervalle [0;1]
    $randNumUni = rand(0,999) / 1000;
    $randNumBi = rand(0,999) / 1000;

    // On récupère un nombre pseudo-aléatoire selon une loi normale centrée réduite
    // (Paramètres : moyenne = 0, écart-type = 1)
    // Utilisation de l'algorithme de Box-Muller
    $randNumNorm = sqrt(-2.0*log($randNumUni))*cos(( 2.0 * 3.141592653589793238462643383279502884197169399375 )*$randNumBi);

    return ($mu + $sigma * $randNumNorm);
}

// Il suffit de centrer la function sur une valeur $mu et de lui donner un écart $sigma pour s'approcher plus ou moins du center de la function recherché

[一种可能的英文翻译:将函数的中心放在一个值 $mu 上并给它一个大小为 $sigma 的间隙就足够了,这样它就会或多或少地接近所需函数的中心。]

于 2014-05-02T09:51:20.760 回答