Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用Box-Muller变换生成任意σ和均值的伪随机数_Algorithm_Random_Language Agnostic - Fatal编程技术网

Algorithm 使用Box-Muller变换生成任意σ和均值的伪随机数

Algorithm 使用Box-Muller变换生成任意σ和均值的伪随机数,algorithm,random,language-agnostic,Algorithm,Random,Language Agnostic,我正在尝试实现生成高斯分布的伪随机数。显然,这种方法只生成sigma为1且平均值为0的数字。如何使用它生成具有任意sigma和均值的数字?Box-Muller生成具有单位方差的分布,因此您的问题的简短回答是:您不使用Box-Muller生成具有任意sigma的数字 然而,长期的答案是光明的。使用支持任意方差的改进Box-Muller算法。这很简单 至于我的意思,那很简单。只需将平均值添加到结果中即可 它归结为李丹尼尔·克罗克在评论中提到的东西;乘以西格玛并加上平均值。不需要单独的方法。统计学的一

我正在尝试实现生成高斯分布的伪随机数。显然,这种方法只生成sigma为1且平均值为0的数字。如何使用它生成具有任意sigma和均值的数字?

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

然而,长期的答案是光明的。使用支持任意方差的改进Box-Muller算法。这很简单

至于我的意思,那很简单。只需将平均值添加到结果中即可


它归结为李丹尼尔·克罗克在评论中提到的东西;乘以西格玛并加上平均值。

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

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);
}
//我已经满足了所有功能中心的要求$mu et de lui donner unécart$sigma pour s’approcher加上所有功能中心的要求


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

谢谢,Jason。我想投你一票,但我没有足够的分数。我在网上找到了实现(修改形式的)转换的代码。:)只需乘以sigma,再加上mu。你可能会研究,这可能会更快,除非你可以在C或汇编中调用
fsincos
expi
。@horchler:我认为更基本的概念是,无论你使用什么机制,你都可以得到一个标准的法线,将其转换为一般的正常值是一个简单的转换。这正是链接文章中所描述的。Box-Muller本身生成具有单位方差的分布。虽然转换到不同的发行版非常简单,但它不再是Box-Muller,而是一个单独的方法,即使略有不同。@JasonC:您没有转换到不同的发行版。您正在转换为正态分布的不同参数化。了解如何将标准法线转换为任意法线超越了基础法线是来自Box-Muller、polar、ziggurat还是其他生成器。你能用英语发表评论吗?你最好将其翻译成英语