我正在研究一个需要大量数据处理的 Matlab 项目,并且某些部分代码需要比 Matlab 函数运行得更快。为此,我需要在其他脚本中调用 .exe,从工作区传递变量。为了了解我如何解决这个问题,我创建了一个小型加法程序。
我有以下代码
function test(a,b)
if ischar(a)
a2=str2num(a);
else
a2=a;
end
if ischar(b)
b2=str2num(b);
else
b2=b;
end
res=a2+b2;
disp(res)
我使用部署工具使其可执行。如果我使用 !test.exe 5 3 通过 matlab 运行 test.exe,它可以工作,如果我创建两个变量 a=5 和 b=3 并尝试 !test.exe ab 它不起作用。
我知道我可以将变量传递给 .txt 或 .dat 文件,然后通过程序关闭并重新打开(我需要使用的变量是动态的)但我不相信它比运行 mfile 更有效从工作区加载变量。
我还搜索了有关使用 varargin、nargin 等的信息,但这些命令没有使用 C 的 argc[]、argv[]。类似的东西可以解决我的问题。
然后我搜索 mex 文件并编写以下代码:
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *mexGetVariable(const char *workspace, const char *varname);
const mxArray *mex_a;
const mxArray *mex_b;
//http://www.mathworks.com/help/techdoc/apiref/mexgetvariable.html
if ((mex_a = mexGetVariable("a", "global"))==NULL)
{
mexErrMsgTxt("Variable 'a' not in workspace.");
}
else if ((mex_b = mexGetVariable("b", "global"))==NULL)
{
mexErrMsgTxt("Variable 'b' not in workspace.");
}
else
{
mexEvalString("!test.exe mex_a mex_b");
}
}
(我也传递了变量 a=5 b=3)但是没有任何效果,因为我有提示说变量 a 不在工作区中。
谁能为我提供一个代码解决方案,说明如何让 .exe 程序在不打开 .txt 或 .dat 文件的情况下从 matlab 工作区读取变量?
预先感谢您阅读我的主题的好意。