太好了,才发现这个论坛.有一个问题希望有能人回答: 我用R做Adaptive Rejection Metropolis Sampling,就是ARMS, 想要调用C的函数,比如一些GSL库的函数都没有问题,但是主调用函数太复杂:
int arms (double *xinit, int ninit, double *xl, double *xr,
double (*myfunc)(double x, void *mydata), void *mydata,
double *convex, int npoint, int dometrop, double *xprev, double *xsamp,
int nsamp, double *qcent, double *xcent, int ncent,
int *neval);
或者是简单型: int arms_simple (int ninit, double *xl, double *xr,
double (*myfunc)(double x, void *mydata), void *mydata,
int dometrop, double *xprev, double *xsamp);
按照3楼所说double *,int * 都没有问题,但是那个密度函数 double(*myfunc)和void *mydata怎么弄呢?
ps: R里的arms在包HI里,虽然根本上也是调用c的arms而没有arms_simple,但好像我分别执行了,结果有点出入.可能是平台的原因?R的arms我执行50000次大概2个小时,而c只要5分钟!如果密度函数再复杂点,呵呵,10000次的R执行就要7个小时,我都要疯了.:)
再简单说下这个算法: 用于预测经济模型,这个模型有n个参数,就要循环n*(~10k)次循环.一般1万次后可以认为是趋于稳定了.
取样一般每40,50个数取一.
感兴趣的朋友可以看看C源文件:arms.c:
http://www.maths.leeds.ac.uk/~wally.gilks/adaptive.rejection/arms.method/arms_method.zip