2017-08-08 104 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