首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ exponential_distribution模板类生成不精确的随机数。

C++ exponential_distribution模板类生成不精确的随机数。
EN

Stack Overflow用户
提问于 2014-11-01 09:25:39
回答 1查看 228关注 0票数 0

我试图生成一系列符合指数分布的随机数。幸运的是,C++提供了这样的模板类exponential_distribution,它可以根据指数分布生成浮点值,提供与平均值(即到达率)相反的值。

另一方面,每个生成的值表示两个随机事件之间的间隔,这两个随机事件是独立的,但由一个恒定的平均到达率(即lambda,λ)来定义。所以lambda是平均值的反面。

在生成这样的随机值后,我要检查所生成的随机数是否准确,所以我根据lambda' = the number of generated randoms (number of arrivals)/the sum of the generated randoms (time duration)生成的随机值来计算到达率,即到达率。

然而,结果表明,lambdalambda'是非常不同的。下面是我的代码,其中lambda=20.0

代码语言:javascript
复制
#include<iostream>
#include<random>
#include<fstream>
#include<map>
using namespace std;

int main(){

    mt19937 mt; //The Mersenne Twister is a pseudorandom number generator (PRNG), default_seed is a member constant, defined as 5489u;
    exponential_distribution<double> exponential_intervals(20.0);
        double interval;
        double timestamp = 0;
        for(int j = 0; j < 20; j ++){
            interval = exponential_intervals(mt);
            cout<<interval<<endl;
            timestamp += interval;  //generate exponentional distribution randoms, in micro seconds

        }

    return 0;
}

创作的作品有:

代码语言:javascript
复制
0.118112
0.0900931
0.00679023
0.173476
0.122309
0.0124894
0.0500325
0.0184205
0.00513157
0.0396175
0.016321
0.0104363
0.0395801
0.247252
0.157921
0.2822
0.167461
0.171627

之和是1.82,所以是lambda'=20/1.82=10.98,这与lambda非常不同。

有人能告诉我如何提高生成的随机画的准确性吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-01 13:29:20

分布的标准差与均值、mu = 1/lambda的标准差相同。记住中心极限定理,样本均值的偏差,对于样本大小N,将近似为mu/sqrt(N)。对于20个样本来说,这是相当大的--大约是你测量值的22% --所以你很可能得到一个相当不准确的估计。

将样本数量增加到10000,使偏差达到1%左右,可以得到一个更好的估计:http://ideone.com/9xjQwg

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26687840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档