如何在 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。第二个输出,非线性等式约束,是一个空数组。
我有一个优化问题已通过 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。第二个输出,非线性等式约束,是一个空数组。