需要在Simulink中调用外部matlab优化函数(值)

时间:2017-06-20 15:37:32

标签: matlab optimization external

我有一个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模型?

0 个答案:

没有答案