正确生成随机指数值c ++

时间:2015-03-29 22:36:40

标签: c++ random linear-regression exponential-distribution

我想生成属于指数分布的随机数。我写了这个

    int size = atoi(argv[2]);
    double *values = (double*)malloc(sizeof(double)*size);

    double gamma = atof(argv[1]);
    if(gamma<=0.0){
        cout<<"Insert gamma"<<endl;
        return 0;
    }


    for(int i=0; i<size; i++){
        values[i]=0;

    }

    srand ( time(NULL) );
    for(int i=0; i<size; i++){
        x = ((double) rand() / (RAND_MAX));
        //cout << random <<endl;
        value=(log(1.0-x)/(-gamma));
        //count each value
        values[value]=values[value]+1.0;
    }

但它们并未涵盖所有矢量的大小。它们或多或少覆盖了矢量的10%,其他字段都是0,并且由于我需要进行线性插值后我想减少那些空白空间&#39;为了使阵列的每个单元至少有一个值,我该怎么办? 例如,我有一个100000的向量,只有前60个字段填充了值,因此60到999999的单元格都是0,当我进行线性回归时,它们对公式产生负面影响。

1 个答案:

答案 0 :(得分:0)

好的,我看到了错误

您生成了size个事件。你真的需要更多的事件来填充直方图

PS

填充箱的概率#n(n在[0 ...大小范围内))由表达式

给出
prob = exp(-gamma*n) - exp(-gamma*(n+1))

其中gamma等于0.01,例如n约为1000,将为您提供约4*10^-7的概率。因此,要在此垃圾箱中获得一个事件,您需要抽样约250万次

PPS

并且使用库指数采样虽然一般都很好,但是根本不知道你的采样是否正常