gpt4 book ai didi

c++ - 自己的 C++11 随机数分布实现

转载 作者:行者123 更新时间:2023-11-27 23:04:23 28 4
gpt4 key购买 nike

我需要在 C++11 中实现我自己的随机数分布类,但我找不到一个最简单的实现来帮助我入门。

我已经搜索了 gcc 源代码,但只找到了头文件,没有找到不同非均匀分布的实现。

你能给我指出一个简单但完整的 C++11 非均匀分布类示例或在此处发布一个吗?

最佳答案

I guess implementing your own distribution is nothing too exotic...

你猜错了。 Luc Devroye 写了一个800 page book关于这个话题。没有一种技术适用于所有发行版。有 4 种通用方法:

  1. 反演 - 如果累积分布函数 FX(b), -∞ < b < ∞, 是连续且可逆的函数,则 FX (X),应用于其自身随机变量的 CDF,具有均匀的 (0,1) 分布。等式 FX(X)=U 并求解 X(如果可能)。

  2. 卷积 - 对随机变量求和或求差产生新的分布。例如,两件制服的总和服从三角形分布;或者,n 个独立卡方 (1) 的总和产生一个卡方 (n)

  3. 组合 - 一些复杂的分布可以使用条件概率从更简单的分布分段构建。

  4. 技巧/特殊关系 - 利用不同分布之间的独特关系,例如标准正态的平方是卡方 (1) 随机变量这一事实;或者卡方 (2) 与指数 (2) 相同。连同毕达哥拉斯的理论,这两个事实是用于生成法线的 Box-Muller 方法的核心。将两个独立的标准法线绘制在一起,您会得到一个从 (0,0) 开始的二维 vector ,它以统一的 (0,2π) 方向前进并且长度为 sqrt(exponential(2)) .生成这样一个 vector 并使用正弦和余弦变换将其转换回笛卡尔坐标以产生两个独立的法线。

Devroye 的书详细介绍了许多“流行”的发行版,但由于发行版的数量是无限的,因此不可能详尽无遗。

tutorial paper 第 59 页的第 4.3 节上面列出的四种技术中的每一种都有一个工作示例,并且在第 60-62 页上有一个反演证明。

关于c++ - 自己的 C++11 随机数分布实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606131/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com