如何在 MATLAB 中不使用 MAX 函数编写 Max(L)<1

How to write Max(L)<1 without using MAX func in MATLAB

我有一个优化问题已通过 fmincon 解决。在这个问题中,我有一个约束,表示向量 L 的每个元素都必须小于或等于 1。所以基本上我可以像这样添加这个约束

C=max(L)-1 ; % C(X)<0

但现在我想在不使用 Max 函数的情况下编写上述约束。
有什么想法吗?

every element of the vector L must be less than or equal to 1.

这应该写成集合 约束,而不是单个约束。人为地将约束 L(1)<=1, L(2)<=1, ... 捆绑到一个约束中只会给求解器带来更多痛苦。

具有线性约束的示例:根据 x(1)<=1 和 x(2)<=1[= 最小化 -x(1)*x(2) 16=]

fmincon(@(x) -x(1)*x(2), [0.5; 0.5], [1 0; 0 1], [1; 1])

(这里使用了简单的形式fmincon(fun,x0,A,b)。)

具有非线性约束的示例:最小化 -x(1)*x(2) 受 x(1)^2+x(2)^2<=1 和x(1)+x(2)^2<=1

fmincon(@(x) -x(1)*x(2), [0.1; 0.1], [],[],[],[],[],[], @(x) deal([x(1)^2+x(2)^2-1; x(1)+x(2)^2-1],[]))

这里使用了fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)的形式,其中nonlcon returns多重不等式约束和等式约束。具体来说,非线性约束函数的第一个输出为[x(1)^2+x(2)^2-1; x(1)+x(2)^2-1];这两个都必须 <=0。第二个输出,非线性等式约束,是一个空数组。