我在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?欢迎任何帮助。
答案 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 ++项目中非常有用,添加路径然后使用!现在你不需要在每一步都改变路径 - 它总是被记住并且总是适用于当前的应用。