2
我有一個用戶定義的函數在R:使用RCPP(cppFunction)的用戶定義的函數
blacksch<-function(s_0,k,sigma,r,t)
{
d1=(log(s_0/k) + (r + (sigma^2)/2)*(t))/(sigma*sqrt(t))
d2=(log(s_0/k) + (r - (sigma^2)/2)*(t))/(sigma*sqrt(t))
p=(pnorm(-d2)*k*exp(-r*t))-pnorm(-d1)*s_0
}
而且我想在C使用此功能++,我使用RCPP和cppFunction編寫的代碼。我已經通過文檔和例子幾次,但沒有成功。
bs_martin<-cppFunction('NumericMatrix compMartin (NumericMatrix st, NumericMatrix dv, double s_0, double k,
double t, double sigma, double r, int steps, int paths, Function blacksch(fun)) {
// Ensure RNG scope set
RNGScope scope;
int min_bs_step=0;
double minbsvalue=0;
vector<double> u[0]=100.0;
for(int i=1;i<=paths; i++)
{
min_bs_step=0;
for(int j=1;j<=steps;j++)
{
if (dv[i,j]>0 && min_bs_step==0)
{
min_bs_step=i;
minbsvalue=blacksch(s_0,k,sigma,r,t);
}
else if (min_bs_step!=0)
{
dv[i,j]=1 - minbsvalue;
}
}
}
return dv;
}')
所以我想製作一個C++'blacksch'是一個可能(和推薦)的解決方案。 – mrkb80 2013-02-18 23:52:41
需要注意的是,在需要時使用'as()'來投射r函數結果非常重要。 –
mrkb80
2013-02-19 00:10:24
是的,但您不需要在評論中重複所有的Rcpp文檔。請仔細研究我們的小插曲,我們的例子,像Rcpp Gallery的東西,以及這裏和郵件列表上的無數答案。讓Google成爲你最好的新朋友。 – 2013-02-19 00:12:57