【问题标题】:How do I use the MATLAB function randn in c++?如何在 C++ 中使用 MATLAB 函数 randn?
【发布时间】:2015-12-08 09:03:24
【问题描述】:

我正在尝试实现此代码,但出现以下编译器错误: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 标签?您是否尝试生成 MEX 文件?
  • randn 不是一个东西,除非你这样做。
  • noo...但是 randn 是一个 matlab fxn
  • 您如何尝试将 MATLAB 函数集成到 C++ 中?
  • 您是否要制作 MEX 文件? randn 在 MATLAB 的 MEX 库中不存在。您必须自己创建函数,或使用 mexCallMATLAB 从 MATLAB 中调用函数。

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


【解决方案1】:

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

附:我听说他们最近将 Matlab Compiler 从 Matlab Compiler SDK 中分离出来,所以要小心购买。

正如@drescherjm 在 cmets 中正确指出的那样,这完全是对您问题的回答,C++ 11 中的随机数生成工具可能会为您提供最好的服务。

【讨论】:

  • @user3551520 我说你最好看看 c++11 的随机支持,而不是这样使用 MATLAB。您已经在问题的 cmets 中获得了该链接。
  • 是的,Matlab Compiler SDK 将创建一个共享库供您在使用 Qt 的任何平台上使用。您需要包含来自 Matlab 安装 Include 文件夹的头文件。此外,您需要包括在创建共享库时生成的标头。然后你需要对.libs 做同样的事情。您有 Mathworks 技术支持吗?他们将引导您完成整个过程。但是,是的,您为什么不使用 C++11 工具来生成随机数?
  • @user3551520 如果您觉得我的回答有帮助,请考虑将其标记为您问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2020-10-14
  • 2021-01-03
  • 2023-03-22
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
相关资源
最近更新 更多