我想生成两个不相关的正态分布随机数序列 X1、X2。
由于正态分布的随机数来自均匀数,所以我需要的只是两个不相关的均匀序列。但如何使用:
srand (time(NULL));
我想我需要播种两次或做类似的事情?
最佳答案
由于高质量随机数生成器生成的随机数是均匀且独立的,因此您可以根据需要生成任意数量的独立序列。
您不需要,也不应该为两个不同的生成器提供种子。
在 C++(11) 中,您应该使用 pseudo-random number generator from the header <random>
。这是一个可以作为实际实现模板的最小示例:
std::random_device seed;
std::mt19937 gen{seed()};
std::normal_distribution<> dist1{mean1, sd1};
std::normal_distribution<> dist2{mean2, sd2};
现在您可以通过调用 dist1(gen)
生成独立的数字序列和dist2(gen)
。 random_device
用于为实际生成器提供种子,在我的代码中它是 Mersenne Twister 生成器。这种类型的生成器非常高效并且具有良好的统计特性。它应该被视为(非加密安全)生成器的默认选择。
关于c++ - 如何使用c++生成不相关的随机序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327249/