【发布时间】:2012-06-19 15:33:20
【问题描述】:
我正在处理一个需要大量数据处理的 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 a b 它不起作用。
我知道我可以将变量传递给 .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 工作区读取变量?
提前感谢您阅读我的主题的好意。
【问题讨论】:
标签: matlab variables exe workspace mex