从正态分布中抽样限定在一定的区间内,可以使用截断(truncation)方法来实现。下面是一个使用C++实现的示例代码:
#include <iostream>
#include <random>
double truncatedNormal(double mean, double stddev, double min, double max) {
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<double> dist(mean, stddev);
double sample;
do {
sample = dist(gen);
} while (sample < min || sample > max);
return sample;
}
int main() {
double mean = 0.0;
double stddev = 1.0;
double min = -1.0;
double max = 1.0;
double sample = truncatedNormal(mean, stddev, min, max);
std::cout << "Sample: " << sample << std::endl;
return 0;
}
在上述代码中,truncatedNormal
函数接受正态分布的均值(mean)、标准差(stddev)、限定区间的最小值(min)和最大值(max)作为参数。它使用std::random_device
生成随机种子,并使用std::mt19937
作为随机数生成器。然后,使用std::normal_distribution
生成正态分布的随机数。
在抽样过程中,使用一个循环来不断生成随机数,直到生成的随机数落在指定的区间内为止。最后,返回符合要求的随机数。
在示例代码的main
函数中,定义了正态分布的均值、标准差和限定区间的最小值和最大值。然后,调用truncatedNormal
函数获取符合要求的随机数,并将其输出到控制台。
这是一个简单的C++实现,可以根据实际需求进行修改和扩展。
领取专属 10元无门槛券
手把手带您无忧上云