Я пытаюсь реализовать этот код, но я получаю следующую ошибку компилятора: 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];
}
Для этого вам нужен Matlab Compiler SDK. Используя Matlab Compiler SDK, вы сможете экспортировать необходимые вам функции Matlab, в вашем случае, возможно, randn
функция. Компилятор SDK создает файлы .dll, .lib и .h для функции Matlab, которую вы хотите экспортировать. Затем вы можете вызвать функцию в общей библиотеке из C ++, используя mwArray
библиотека, созданная специально для сортировки данных между dll, сгенерированным Matlab, и вашим C ++ кодом. Все это задокументировано Вот.
Постскриптум Я слышал, что они недавно отделили Matlab Compiler от Matlab Compiler SDK, так что будьте осторожны с тем, что вы покупаете.
Это строго ответ на ваш вопрос, как указано, средства генерации случайных чисел в C ++ 11, вероятно, будут вам полезны, как правильно указывает @drescherjm в комментариях.