2

私はrにユーザー定義関数を持っています:

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
}

そして、RcppとcppFunctionを使用して作成したc++コードでこの関数を使用したいと思います。ドキュメントと例を数回確認しましたが、成功していません。

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;
                       }')
4

1 に答える 1

1

私は次のことを提案します:

  • ドキュメントと例を調べてください。推奨されていない場合でも、関数を渡す方法も示します(パフォーマンス上の理由から、C ++からRを呼び出すのは高速ではありません)。

  • やや複雑な例が機能しない場合は、小さい例を試してください。1日の終わりに、2つの数値を受け取り、それらを提供された関数に渡すテスターが必要になる場合があります。

  • そして最後に:あなたは本当にblackschC++でも欲しいです。すべての統計関数は同じ名前で使用できます。

于 2013-02-18T23:46:57.460 に答える