【问题标题】:Using the Box-Muller transform to generate pseudorandom numbers with any sigma and mean使用 Box-Muller 变换生成具有任意 sigma 和均值的伪随机数
【发布时间】:2013-08-05 01:10:47
【问题描述】:

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

【问题讨论】:

  • 乘以 sigma 并加上 mu。
  • 您可能会查看log-polar method,它可能会更快,除非您可以在 C 或汇编中调用 fsincosexpi
  • @horchler:我认为更基本的概念是,无论您使用什么机制来获得标准法线,将其转变为通用法线都是微不足道的转换。

标签: algorithm random language-agnostic


【解决方案1】:

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

【讨论】:

  • 这正是链接文章中描述的内容。 Box-Muller 本身会生成具有单位方差的分布。虽然转换为不同的发行版非常简单,但它不再是 Box-Muller,它一个单独的方法,即使是微不足道的不同。
  • @JasonC:您没有转换到不同的发行版。您正在转换为正态分布的不同参数化。知道如何将标准法线转换为任意法线超越了底层法线是否来自 Box-Muller、polar、ziggurat 或其他生成器。
【解决方案2】:

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

然而,长答案更明确。 Here is a paper 使用支持任意方差的修改后的 Box-Muller 算法。这很简单。

至于卑鄙,那很容易。只需将平均值添加到结果中即可。

归结为 Lee Daniel Crocker 在 cmets 中提到的内容;乘以 sigma 并加上平均值。

【讨论】:

  • 谢谢,杰森。我会支持你,但我没有足够的积分。我在网上找到了实现转换(的修改形式)的代码。 :)
【解决方案3】:
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 的间隙就足够了,这样它就会或多或少地接近所需函数的中心。]

【讨论】:

  • 你能用英文发表你的评论吗?
  • 你最好把这个翻译成英文
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2014-10-24
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多