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

时间:2015-05-29 11:07:35

标签: matlab optimization max

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

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

但是现在我想用Max函数编写上面的约束 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

向量L的每个元素必须小于或等于1.

这应该写为约束的 set ,而不是单个约束。将约束L(1)&lt; = 1,L(2)&lt; = 1,... ...人工地捆绑成一个约束将导致求解器更多的痛苦。

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

的影响
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&lt; = 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返回多个不等式约束和等式约束。具体来说,非线性约束函数的第一个输出是[x(1)^2+x(2)^2-1; x(1)+x(2)^2-1];这两者都需要<= 0。第二个输出,非线性等式约束,是一个空数组。