1

我正在尝试fmincon从 C++ 调用 Matlab 的函数。我正在使用通话

mxcallMatlab(2, &arg1, 4, &arg2, "fmincon");

其中arg2"是一个维度为 4 的 MatlabmxArray数组(即定义为mxArray *arg2[4])。arg2接受 4 个不同的参数fminconarg2[0]应该是fmincon用作其第一个参数的目标函数句柄。问题是如何将目标函数句柄传递给arg2[0]. 我的目标函数不是在 Matlab 中定义的,而是在 c++ 中定义的。我应该将我的目标函数指针转换为双精度(我必须这样做,因为 Matlab 的所有输入都是双精度的),然后将其传递给arg2[0]?

4

1 回答 1

1

如发现here

只有 MATLAB 可以调用 MATLAB 函数句柄。MATLAB 中的函数句柄是一种数据结构,其中包括(除其他外)对数据块的引用,该数据块以需要由 MATLAB 引擎解释的预解析线程解释器格式存储 MATLAB 代码。MATLAB .m 代码不能编译为机器语言,只能编译为链接的数据结构。

因此,您无法直接实现您想要的。您必须在单独的 MEX 文件中定义目标函数,在 Matlab 中为其定义一个函数句柄,然后将其传递给您调用fmincon. 所以,像

[sol, fval, ...] = your_main_mex(@your_objective_mex, ...)
于 2012-10-13T18:16:39.990 回答