0

很长一段时间以来,我一直在尝试从gsl dirichlet分布中提取随机变量,但我似乎无法使其工作。

我四处寻找文档/示例,但找不到任何东西。有人有什么建议吗?

基本上,gsl 提供的功能是:

void gsl_ran_dirichlet(const gsl_rng *r, size_t K, const double alpha[], double theta[])

您可以在下面找到我正在使用的代码。我可以让程序从 beta 发行版中返回一个随机抽取,所以它正在编译。但是我为狄利克雷做了一些(或可能)一些错误的事情。

#include <iostream>
#include <stdlib.h>
#include <math.h>
#include "gsl/gsl_rng.h"
#include "gsl/gsl_randist.h"

using namespace std;

int main(int argc, const char *argv[])  {
    
    gsl_rng *gen = gsl_rng_alloc (gsl_rng_mt19937);             // allocate gsl_rng version of Mersenne twister
    gsl_rng_set(gen,(unsigned)time(NULL));                      // seed gsl_rng version of Mersenne twister
   //gsl_rng gen1;
    gsl_rng** gen1;
    gen1 = &gen;
    gsl_rng* gen2;
    gen2 = gen;

    double aBetaDist = 2; 
    double bBetaDist = 2; 
    double belateresult = gsl_ran_beta(gen,aBetaDist,bBetaDist);
    const size_t K = 3;
    const double alpha [3] = { 3, 3, 3}; 
    double theta[3];

void gsl_ran_dirichlet(const gsl_rng *r, size_t K, const double alpha[], double theta[]);
     gsl_ran_dirichlet(gen, K, alpha[], theta[]);

cout << "beta_value = " << gsl_ran_beta(gen,aBetaDist,bBetaDist) << endl;
cout << "beta_value1 = " << belateresult << endl;
cout << "alpha_value = " << alpha[2] << endl;

    gsl_rng_free(gen);
    return 0;
}

非常感谢你的帮助!

4

0 回答 0