0

数値と確率配列を指定して多項分布を返すコード片/関数を作成/検索しようとしています。たとえば、関数:

Mult(N, pp[])

たとえば、pp={0.3, 0.2, 0.5} の場合 (pp は可変サイズ、たとえば 2 ~ 10 個の要素を持つことができます)。

Mult(10, pp[])

次のような出力が得られます。

1,1,8
3,1,6
2,3,5

さまざまな機会に呼び出されたとき。

gsl を使って次のようなことが考えられますが、さまざまな機会に繰り返し呼び出されると、これは良くありません。以下に引用したコードが良くないことは理解していますが、より良いコードを作成するための提案を楽しみにしています。ありがとう。

std::vector<int> Mult(int numb, std::vector<double> prob_array)
{
    const gsl_rng_type * T2;
    gsl_rng * r2;
    srand(); // srand(time(NULL));

    unsigned int Seed2 = 1234567; // rand();
    gsl_rng_env_setup();

    T2 = gsl_rng_default;
    r2 = gsl_rng_alloc (T2);
    gsl_rng_set (r2, Seed2);

    size_t k = prob_array.size();

    double ppp[k]; // Probability array

    for(int ii=0; ii<prob_array.size(); ++ii) {
        ppp[ii] =  prob_array[ii];
    }

    unsigned int mult_op[k];
    gsl_ran_multinomial(r2, k, numb, ppp, mult_op);
    std::vector<int> multi;
    for(int ii=0; ii<kk; ++ii ){
        multi.push_back(mult_op[ii]);
    }
    return multi;
}
4

0 に答える 0