如何在c ++中使用MATLAB函数randn?

时间:2015-09-11 18:06:37

标签: c++ matlab random interop matlab-compiler

我正在尝试实现此代码,但我收到以下编译器错误:randn wasn't declared in the scope

void levyflt()
{
  int j;
  double beta=1.5,sigma,rand_num;

  sigma=pow((tgamma(1+beta)*sin(M_PI*beta/2)/(tgamma((1+beta)/2)*beta*pow(2,((beta-1)/2)))),(1/beta));

  for(j=0;j<d;j++)
  {

    rand_num=randn(-1,1);
    u[j]=rand_num*sigma;
    rand_num=randn(-1,1);

    v[j]=rand_num;
    step[j]=u[j]/pow(fabs(v[j]),(1/beta));
    L[j]=0.01*step[j];
  }


  cout<<L[j];
}

1 个答案:

答案 0 :(得分:1)

你需要Matlab编译器SDK。使用Matlab编译器SDK,您将能够导出所需的特定Matlab功能,在您的情况下可能是randn函数。 Compiler SDK为您要导出的Matlab函数生成.dll,.lib和.h文件。然后,您可以使用专为在Matlab生成的dll和C ++代码之间编组数据而构建的mwArray库,从C ++调用共享库中的函数。所有这些都记录在案here

P.S。我听说他们最近将Matlab编译器与Matlab编译器SDK分开了,所以要小心你购买的东西。

这严格地回答了你提出的问题,C ++ 11中的随机数生成工具可能会为你提供最好的服务,正如@drescherjm在评论中正确指出的那样。