您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在C / C ++中遵循正态分布生成随机数

在C / C ++中遵循正态分布生成随机数

有许多方法可以从常规RNG生成高斯分布数。

该箱穆勒变换是常用的。它会正确产生具有正态分布的值。数学很简单。您生成两个(均匀)随机数,然后对它们应用公式,就得到两个正态分布的随机数。返回一个,并将另一个保存为下一个随机数请求。

C ++ 11提供了std::normal_distribution,这就是我今天要去的方式。

以下是一些按升序排列的解决方案:

将0到1之间的12个均匀随机数相加并减去6。这将与正常变量的均值和标准差匹配。一个明显的缺点是范围限制为±6,这与真实的正态分布不同。

@R_305_2419@-Muller变换。这已在上面列出,并且实现起来相对简单。但是,如果您需要非常精确的样本,请注意,将@R_305_2419@-Muller变换与某些均匀生成器结合使用会遇到一个称为Neave Effect 1的异常现象。

为了获得最佳精度,我建议绘制制服并应用逆累积正态分布以得出正态分布变量。这是逆累积正态分布的一种非常好的算法。

其他 2022/1/1 18:25:39 有540人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶