很长一段时间以来,我一直在尝试从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;
}
非常感谢你的帮助!