我正在尝试实现Box-Muller transform来生成具有高斯分布的伪随机数。显然,这种方法只生成带有sigma 1和mean 0的数字。如何使用它生成具有任意sigma的数字并且意味着什么?
答案 0 :(得分:10)
不需要单独的方法。统计数据的一个众所周知的结果是,您可以通过简单变换X = sigma*Z + mu
在标准法线(高斯)值Z之间来回转换为具有平均值μ和标准偏差西格玛的一般高斯X,反之亦然, Z = (x - mu)/sigma
。这就是为什么统计书只需要/提供一个高斯分布表。
答案 1 :(得分:2)
Box-Muller生成具有单位方差的分布,因此对您的问题的简短回答是:您不使用Box-Muller生成具有任意西格玛的数字。
然而,答案很长,更明亮。 Here is a paper使用修改后的Box-Muller算法,支持任意方差。这非常简单。
至于意思,那个很容易。只需在结果中添加均值即可。
归结为Lee Daniel Crocker在评论中提到的内容;乘以sigma并加上均值。
答案 2 :(得分:1)
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 centre la centre la sur une valeur $ mu et de lui donnerunécart$ sigma pour s'approcher plus ou moins du centre de lafunctionrecherché
[可能的英文翻译:将函数置于价值$ mu的中心并给它一个大小为$ sigma的间隙就足够了,这样它就会或多或少地接近所需函数的中心。