我正在尝试在 Simulink-Matlab 框架中实现一种特定类型的模型预测控制。为此,我的计划是让 Simulink 中的动态模型调用一个外部 Matlab S-Function,该 S-Function 反过来运行一个调用不同 Simulink 文件的优化。因此,程序流程如下: Simulink -> Matlab (fmincon
或quadprog
) -> Simulink。
如您所见,Matlab S-function 会调用fmincon
or quadprog
,但我想将 fmincon 用于我的特定控件类型。请忽略到目前为止与计算效率相关的任何问题。
我尝试了这种方法,但是有两个非常明显的问题: *首先,为了编译代码不会出错(基本上是获得一个.mex文件,我不需要用C编程),我添加了命令
coder.extrinsic('fmincon');
这是必需的,否则 Simulink 无法编译 mex 文件。但是,如果您这样做,则会收到以下错误:
Function handles cannot be passed to extrinsic functions.
我试图将调用 Simulink 的成本函数更改为另一个更简单的成本函数 ( x.^2
),但仍然出现错误。
寻找问题的解决方案,我fmincon
在 Mathworks 博客上发现了相同的问题(即如何从 Simulink 中的 Matlab 函数调用),但没有答案(https://uk.mathworks.com/matlabcentral/answers/65202 -optimization-calling-fmincon-in-simulink-embedded-block)。
谁能帮我一把?提前致谢!