接受拒绝算法 C++ 正态分布
acceptance rejection algorithm c++ normal distribution
一般的接受拒绝算法是像往常一样。
1从 Unif[0,1] 生成 U 1 ,U 2 ,U 3
2 X ← −log(U 1 )
3 如果 U 2> exp(−0.5(X − 1) 2 )....返回,直到满足条件。
我的问题是我是否需要为每个均匀分布使用单独的种子或使用相同的种子?
您需要使用相同的种子 – 就像 in 一样,您只能为生成器设定一次种子。更重要的是,您应该只使用一个生成器:没有理由使用多个生成器,并且很容易引入多个生成器的细微错误。
从技术上讲,对于足够好的PRNG来说,这并不重要(只要种子是不同的),但它也不会受到伤害。对于较差的 PRNG,如果种子以任何方式相关,使用单独的种子可能会显着扭曲您的结果(除非您从真正的随机设备中种子,否则它们实际上经常如此)。
请务必在C++中使用新的<random>
标准标头! std::rand
应被视为已弃用。
我认为问题是,用于在接受拒绝算法中生成辅助变量的伪随机数生成器 (PRNG) 是否应该以不同的方式播种。
没有良好的 PRNG,就不可能有良好的统计属性,因此在考虑播种之前,请选择一个好的生成器。给定一个好的生成器,在创建两个独立发行版的用例中,您不需要使用不同的种子。事实上,你可能会意外地(即使用一个好的生成器不太可能)选择一个特别糟糕的种子组合,导致统计异常。
幸运的是,从 C++11 开始,通常会在标题<random>
中为您提供良好的 PRNG。我的默认选择是Mersenne Twister。我认为您希望通过手动编码的接受拒绝作为实践或由于其他一些要求来生成正态分布。如果没有,C++11 已经为您提供了现成的正态分布。
您必须使用不同的种子,因为如果您使用相同的种子,那么您的随机变量的协方差将为 1。
- 改变或缩放两个正态分布以具有特定的相关系数
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 逆生存函数与正态分布的PPF(ICDF)?
- C 中高斯的随机正态分布
- C :实用程序名称空间中的正态分布
- MT19937和正态分布
- 生成C++中的正态分布随机数
- 如何从限于一定间隔的正态分布进行采样,即C 实现
- 带参数的累积正态分布函数的逆
- 在.h文件中声明正态分布生成器
- Box Muller Transform在实现正态分布PRNG时的问题
- 接受拒绝算法 C++ 正态分布
- 在C 中实现正态分布的统一比率
- 如何创建一个在单独的方法中工作的c++随机正态分布
- 如何在C++中随机采样具有给定平均值和标准误差的正态分布
- C++中对数正态分布的累积函数的逆
- C++生成范围内服从正态分布的随机数
- 在 gmp 任意精度上生成正态分布
- 如何计算 CDF C++中正态分布概率
- 随机数的正态分布会挂起程序