gpt4 book ai didi

c++ - 如何生成具有指数分布(均值)的随机数?

转载 作者:可可西里 更新时间:2023-11-01 15:38:37 25 4
gpt4 key购买 nike

我正在尝试生成均值为 1 的指数分布随机数。我知道如何获取具有均值和标准差的正态分布随机数。我们可以通过normal(mean, standard_deviation)得到它,但是我不知道如何得到指数分布的随机数。

谁能帮我解决这个问题?

最佳答案

C++11 中,标准实际上保证了 RNG 遵循 STL 中可用的指数分布的要求, object-type 有一个非常具有描述性的名称。

指数分布随机生成器中的均值由公式E[X] = 1/lambda1计算。

std::exponential_distribution 有一个以 lambda 作为参数的构造函数,因此我们可以通过计算 lambda< 的值轻松地按照您的规则创建一个对象/em> 并将其传递给我们的生成器。

std::exponential_distribution rng (1/1); // lambda = 1 / E[X]

脚注
1. 根据 en.wikipedia.org - Exponential distribution > Mean, variance, moments and median


分布为可读的ascii图表

#include <iomanip>
#include <random>
#include <map>
#include <iostream>

int
main (int argc, char *argv[])
{
double const exp_dist_mean = 1;
double const exp_dist_lambda = 1 / exp_dist_mean;

std::random_device rd;

std::exponential_distribution<> rng (exp_dist_lambda);
std::mt19937 rnd_gen (rd ());

/* ... */

std::map<int, int> result_set;

for (int i =0; i < 100000; ++i)
++result_set[rng (rnd_gen) * 4];

for (auto& v : result_set) {
std::cout << std::setprecision (2) << std::fixed;

std::cout << v.first/4.f << " - " << (v.first+1)/4.f << " -> ";
std::cout << std::string (v.second/400, '.') << std::endl;

if (v.second/400 == 0)
break;
}
}

0.00 - 0.25 -> ........................................................
0.25 - 0.50 -> ...........................................
0.50 - 0.75 -> .................................
0.75 - 1.00 -> .........................
1.00 - 1.25 -> ....................
1.25 - 1.50 -> ...............
1.50 - 1.75 -> ............
1.75 - 2.00 -> .........
2.00 - 2.25 -> .......
2.25 - 2.50 -> .....
2.50 - 2.75 -> ....
2.75 - 3.00 -> ...
3.00 - 3.25 -> ..
3.25 - 3.50 -> ..
3.50 - 3.75 -> .
3.75 - 4.00 -> .
4.00 - 4.25 -> .
4.25 - 4.50 ->

关于c++ - 如何生成具有指数分布(均值)的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491458/

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