1

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

    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,并且由于在我需要进行线性插值之后,我想减少那些“空白空间”,以便每个字段至少有一个值数组的单元格,我该怎么做?例如,我有一个 100000 的向量,只有前 60 个字段填充了值,所以从 60 到 999999 的单元格都是 0,当我进行线性回归时,它们会对公式产生负面影响。

4

1 回答 1

0

好的,我看到了错误

你产生size了许多事件。你真的需要更多的事件来填充直方图

附言

填充 bin #n 的概率(n 在 [0...size) 范围内)由表达式给出

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

gamma等于 0.01,比如说, 大约n1000 会给你大约4*10^-7. 因此,要在此垃圾箱中获得一个事件,您需要采样大约 250 万次

聚苯乙烯

并使用图书馆指数采样,虽然它一般来说很好,但不会给你买任何东西,因为据我所知,你的采样是可以的

于 2015-03-29T23:18:12.563 回答