如何在stan

时间:2016-08-24 00:54:19

标签: c lapack stan

我正在尝试使用HMC通过自定义目标函数进行MCMC采样。我有我的HMC代码,但它不能很好地工作。我最近知道" stan"它具有更强大的HMC模型。所以我想用" stan"。

来实现我的代码

我已经编写了目标函数以及C中的导数函数。它涉及for循环,以及Cholesky分解和Lapack的其他线性代数所需的函数。我真的不想在斯坦那里重新编码。有没有办法直接使用我的功能?如果有人能提供一些关于如何修改我的代码的线索,或者教我如何修改" stan"码。以下是我的代码的一部分:

void get_V(double phi, double sigmasq, double k, double *neardist, 
double *neardistM, int *nearind, double *w, int n, int m, double *V){

double one = 1.0, var;
int i, j, dim ,info, int_one = 1;
double *u, *temp_neardistM;
char UPLO = 'L';
char SIDE = 'L', DIAG = 'N';
char TRANS = 'N', TRANS2 = 'T';

var = (double)(1/k) * sigmasq;

V[0] = var;

for (i = 1; i < n ; i++){
    if(i < m) {
        dim = i;
    }
    else {
        dim = m;
    }

    ...       

    // Cholesky decomposition of temp_neardistM
    info = -1;
    dpotrf_(&UPLO, &dim, temp_neardistM, &dim, &info);   
    if (info != 0) {free(temp_neardistM); return ;}

    ...

    // get Vi
    dtrsm_(&SIDE, &UPLO, &TRANS, &DIAG, &dim, &int_one, &one, temp_neardistM, &dim, u, &dim);
    V[i] = (var - sigmasq * (sq_sum(u, dim)) );

    ...

    }
}

0 个答案:

没有答案