2017-08-08 155 views
0

如何在MATLAB函数fmincon中设置解决方案的约束(x1,x2),以便x1 ~= x2x1不是x2)?
数值意义上的:x1不应该接近x2如何在fmincon中使用'不等于'不等式约束?

+0

你是如何使用fmincon的?您可能需要添加更多脚本才能获得正确答案。当x1接近x2时,你是否尝试使用if语句来标记? – Flynn

+0

我是fmincon新手。 所以我试着用一个函数句柄和低/上限来限制这个函数。当使用相同值的两个参数时,我遇到了一些奇点问题。 '[x1,x2] = fmincon(Fcn,[initPara1,initPara2],[],[],[],[],lb,ub,[],options);' 我该如何标记这个在这个函数中?是否有可能通过第9个输入(nonlcon)和另一个功能手柄来达到它? – FRadar

+0

那么你在哪里得到x1和x2? – Flynn

回答

0

要表达的A*x ≤ b形式约束x1 ≠ x2,这将是以下任一:

x(1) – x(2) ≤ –eps % x(2) ≥ x(1) + eps 
– x(1) + x(2) ≤ –eps % x(1) ≥ x(2) + eps 

按照第一个,x(2)应该比x(1)更大。根据第二个,x(1)应该大于x(2)。以上的组合是:

A = [1, -1; -1, 1]; 
b = [-eps; -eps]; 

但你不能用这个Ab直接,因为这将意味着x(1) + x(2) = eps这是不正确的。因此,为了找到函数的最小值和最小的值,可以分别考虑两个条件,即一次一个,并且看哪个最小化。即

[x(1,:), fval(1)] = fmincon(Fcn, x0, A(1,:), b(1), [], [], lb, ub, [], options); 
[x(2,:), fval(2)] = fmincon(Fcn, x0, A(2,:), b(2), [], [], lb, ub, [], options); 
[Minfval, tmpInd] = min(fval); %Finding the minimum value of these 
Req_x = x(tmpInd,:);    %Required solution