我正在寫一個大都市,黑斯廷斯算法爲N(0,1)分佈利用分佈函數:RCPP - 如何在C++代碼
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector metropolis(int R, double b, double x0){
NumericVector y(R);
y(1) = x0;
for(int i=1; i<R; ++i){
y(i) = y(i-1);
double xs = y(i)+runif(1, -b,b)[0];
double a = dnorm(xs, 0, 1)[0]/dnorm(y(i), 0, 1)[0];
NumericVector A(2);
A(0) = 1;
A(1) = a;
double random = runif(1)[0];
if(random <= min(A)){
y[i] = xs;
}
}
return y;
}
但每次我試圖編譯功能,出現此錯誤:12
行:調用 'dnorm4' 不匹配函數
我試着寫使用dnorm一個微不足道的功能,如
NumericVector den(NumericVector y, double a, double b){
NumericVector x = dnorm(y,a,b);
return x;
}
它的工作原理。有人知道我爲什麼在Metropolis代碼中出現這種類型的錯誤嗎? 有沒有其他的方式來使用像R中的C++代碼中的密度函數?
在SO和其他地方的Rcpp圖庫上有_dozens_適合的例子。 –