MATLAB 中的约束最小化

Constrained minimization in MATLAB

我想解决一个约束最小化问题,我正在寻求有关如何构建代码的帮助。

我知道 fmincon 是我应该通过使用参数 @mycon 来使用的,但我正在努力使它适应我的情况。任何建议将不胜感激。

这些是我的文件(ab 是预定义参数):

  1. f1.m

    function [y1, y2, y3]=f1(x1, x2, a)
    ...
    end
    
  2. f2.m

    function w1=f2(x1, x2, y2, y3, b)
    ...
    end
    

我要编码的问题:

min y1 w.r.t x1, x2
such that y1<=w1

您可以按如下方式使用 fmincon

x = fmincon(@(x) f1(x(1), x(2), a), [x1_start x2_start], [], [], [], [], [], [], @(x) mycon(x(1), x(2), a, b));
x1 = x(1)
x2 = x(2)

mycon 定义为:

% C <= 0 and Ceq == 0
function [C, Ceq] = mycon(x1, x2, a, b)
    [y1, y2, y3] = f1(x1, x2, a);
    C = y1 - f2(x1, x2, y2, y3, b);
    Ceq = [];
end

x1_startx2_start Matlab使用的迭代求解器中x1x2的起始值。

请查看 matlab 文档和示例以获取更多信息。