我有一个simulink文件,我需要调用某个优化函数:
function u = MPC(r, x0, Thorizon, Q, W, cons)
R = [];
for s=1:Thorizon+1
R = vertcat(R, r);
end
ops = sdpsettings('solver','quadprog','verbose',0);
U = sdpvar(Thorizon+1,1);
cost = (R - (Q*U+W*x0))'*(R-(Q*U+W*x0))+U'*U;
optimize(cons,cost,ops);
u = value(U);
u = u(1);
end
但是,我不确定如何在Simulink中实现这一点。 我尝试使用matlab功能块,但出现了一些问题。 首先,它返回一些错误,如
功能' eval'代码生成不支持。考虑添加 coder.extrinsic(' eval')位于函数顶部以绕过代码 代。
或喜欢
功能' sdpsettings.m' (#103.12741.12757),第355行,第12栏: " temporaryOptions"启动诊断报告。
它(可能)与优化器(sdp)是一个外部函数这一事实有关,它是一个单独安装的库的一部分。
另一个可能的问题是输入参数。 如果我要使用Matlab函数块,那么cons参数会出现问题,可以采用不等式形式,例如
U<1
然而,该函数在Matlab环境中起作用。 但是这个函数的输出需要是simulink中存在的连续非线性模型的输入。
所以我的问题是, 有任何建议,要么:在Simulink工作中使用这样的功能,比如通过Matlab功能块,或者在matlab运行环境中使用该功能,并将输出值重复发送到simulink模型?