我有一个 C++ 文件:
- 启动 matlab 引擎
- calls
matlab_optimize()
(一个编译后的 m 文件,在内部运行 matlab 优化器之一)
- 打印结果
- 停止发动机并退出
这很好用。我现在想将第二行更改为
- calls
matlab_optimize(obj_fun)
Where obj_fun()
是我的 C++ 代码中定义的函数,它本身会回调到其他代码中。本质上我希望内部使用 matlab 优化器matlab_optimize
使用我提供的函数指针作为目标函数。
我不能只是编译obj_fun()
作为一个独立的 mex 文件,因为我希望它与启动 matlab 引擎(驱动整个过程)的 c++ 进程进行通信。
2009 年的新闻组帖子 http://www.mathworks.com/matlabcentral/newsreader/view_thread/252735似乎表明这是不可能的。然后再次使用 Matlab C++ 数学库工具箱.
也在谷歌上搜索显示这个生成的片段 http://www.princeton.edu/~rvdb/matlab/mex.h:
/*
* Register a function pointer as a MATLAB-callable function.
*/
extern void mexRegisterFunction(void);
这似乎正是我想要的,但该文件是 2000 年的,我在 matlab 文档中没有找到任何对此函数的引用。那么如何使用这个呢?
您可以使用mclCreateSimpleFunctionHandlemclmcrrt.h 标头中的函数可实现此功能。
它用原型转换函数void(*)(int,mxArray*,int,mxArray)到 mxArray 结构。
您可以将其传递给 MATLAB 侧函数并像一般 MATLAB 函数一样调用它,而无需使用 mex 文件进行任何操作。
在 C/C++ 方面:
void callback(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])
{
<some manipulations with data>;
}
...
//calling the matlab function
matlab_function(mclCreateSimpleFunctionHandle(callback));
在 MATLAB 端:
function [] = matlab_function(function)
function(<any variable>)
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)