我正在尝试实现此代码,但我收到以下编译器错误: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];
}
答案 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在评论中正确指出的那样。