0
如何在MATLAB函數fmincon
中設置解決方案的約束(x1
,x2
),以便x1 ~= x2
(x1
不是x2
)?
數值意義上的:x1
不應該接近x2
。如何在fmincon中使用'不等於'不等式約束?
如何在MATLAB函數fmincon
中設置解決方案的約束(x1
,x2
),以便x1 ~= x2
(x1
不是x2
)?
數值意義上的:x1
不應該接近x2
。如何在fmincon中使用'不等於'不等式約束?
要表達的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];
但你不能用這個A
和b
直接,因爲這將意味着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
你是如何使用fmincon的?您可能需要添加更多腳本才能獲得正確答案。當x1接近x2時,你是否嘗試使用if語句來標記? – Flynn
我是fmincon新手。 所以我試着用一個函數句柄和低/上限來限制這個函數。當使用相同值的兩個參數時,我遇到了一些奇點問題。 '[x1,x2] = fmincon(Fcn,[initPara1,initPara2],[],[],[],[],lb,ub,[],options);' 我該如何標記這個在這個函數中?是否有可能通過第9個輸入(nonlcon)和另一個功能手柄來達到它? – FRadar
那麼你在哪裏得到x1和x2? – Flynn