“Matlab Engine命令窗口中的”未定义的函数或方法“

时间:2012-01-18 12:08:45

标签: c++ matlab-engine matlab

我在Visual Studio上使用C ++代码,并将一些变量发送到MATLAB引擎。到目前为止没有问题。想象一下,我打开了MATLAB命令窗口和这些变量:

» whos
  Name            Size             Bytes  Class     Attributes

  QWe             1x365             2920  double              
  QWp             1x364             2912  double              
  QWu             1x364             2912  double 

我可以使用标准的MATLAB函数,但我已经下载了一个新的function.m(在设置路径后通常在MATLAB中工作),这个命令窗口来自MATLAB的引擎无法识别或查找。

» isnormq(Q)
??? Undefined function or method 'isnormq'

我认为它们(命令窗口和MATLAB)是同步的,但现在我发现它们不是。

如何解决这个问题,以便从命令窗口中使用我的function.m?欢迎任何帮助。

2 个答案:

答案 0 :(得分:3)

由于已经很长时间没有人回答我会发布我所做的事情:

在Matlab中,每当你需要一个newtoolbox时,你就会将路径链接一次,然后就会“永远”。您可以使用工具箱中的函数,就像默认情况下在Matlab中一样。

使用matlab引擎这不起作用,因此需要编写命令行:

% Here we load the toolbox for converting quaternion to Euler Angles
addpath(genpath('C:\Program Files (x86)\MATLAB\R2010a\toolbox\SpinCalc')); //for example

答案 1 :(得分:0)

已经很长时间了,但我遇到了同样的问题,并找到了一些有趣的信息。

首先在较新版本的MATLAB(2016a)中,MATLAB Engine搜索路径为 C:\ Program Files \ MATLAB \ R2016a (或者与安装MATLAB的路径相同)。因此,如果您不改变它,C ++可以使用所有内置函数。 此外,您可以使用工具箱中的功能!

但是还有一个问题:用户定义的函数怎么样?因此,我需要将.m文件直接放到 C:\ Program Files \ MATLAB \ R2016a ,以使其对MATLAB Engine可见。

这里我们可以采用另一种方式 - 只需通过C ++将.m文件的路径添加到MATLAB中:

char CommandChangePath[MAX_PATH];
strcpy(CommandChangePath, "addpath('C:\\Users\\SuperUser\\Documents\\Visual Studio 2017\\Projects\\MyCppProject')");
engEvalString(ep, CommandChangePath);

对我来说,将必要的MATLAB函数放在当前的C ++项目中非常有用,添加路径然后使用!现在你不需要在每一步都改变路径 - 它总是被记住并且总是适用于当前的应用。