約束我需要與下列約束下最大化等式3倍+ Y在MATLAB:最大化3X + y隨在Matlab
2X + Y < = 6, X + 3Y < = 9,並且x,y > = 0
我真的很難搞清楚如何放入約束條件,以便我可以將它們與原始方程聯繫起來。我是matlab新手,無法解決這個問題。
在此先感謝!
約束我需要與下列約束下最大化等式3倍+ Y在MATLAB:最大化3X + y隨在Matlab
2X + Y < = 6, X + 3Y < = 9,並且x,y > = 0
我真的很難搞清楚如何放入約束條件,以便我可以將它們與原始方程聯繫起來。我是matlab新手,無法解決這個問題。
在此先感謝!
創建以下文件並運行maximize_stuff:
maximize_stuff.m:
function [] = maximize_stuff()
x0 = [2 2]; % fmincon starts at X0 and finds a minimum X
[x,fval] = fmincon('objfun',x0,[],[],[],[],[0;0],[Inf;Inf],'constraint');
fval = -fval; % Because we want to find the maximum, not the minimum
x
fval
end
objfun.m
function f=objfun(x)
f = 3*x(1) + x(2);
f = -f; % Because we want to find the maximum, not the minimum
end
constraint.m:
function [c,ceq]=constraint(x)
c1 = 2 * x(1) + x(2) - 6;
c2= x(1) + 3*x(2) - 9;
c = [c1;c2];
ceq = [];
end
它建議立即進行刪除d返回:
>> maximize_stuff
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
Active inequalities (to within options.TolCon = 1e-06):
lower upper ineqlin ineqnonlin
2 1
x =
3.0000 0
fval =
9.0000
您可以驗證結果 http://www.wolframalpha.com/input/?i=2x%2By%3C%3D6%3B+x%2B3y%3C%3D9%3B+x%3E%3D0%3By%3E%3D0%3B:
一個很好的教程:http://www.math.colostate.edu/~gerhard/classes/331/lab/fmincon.html
fmincon被稱爲如下:
線性不等式約束斧£僅b(如在linprog):[X,FVAL] = fmincon( 'objfun',X0,A,B)
線性不等式約束和線性等式約束AEQ· x = beq only:[x,fval] = fmincon('objfun',x0,A,b,Aeq,beq)
帶有線性不等式和等式約束,此外還有一個下限x36b : [x,fval] = fmincon('objfun',x0,A,b,Aeq,beq,lb)如果只有變量的一個子集有一個下界,那麼lb的分量對應於 變量,沒有下界是-Inf。例如,如果變量 是(x,y)和x³1但是y沒有下限,那麼lb = [1; -Inf]。
與線性不等式和等式約束,降低以及一個上限的形式X£UB的只有: [X,FVAL] = fmincon( 'objfun',X0,A,B,AEQ,BEQ, lb,ub)如果只有變量的一個子集有一個上限,那麼對應於沒有上限的變量的ub的分量是Inf。例如,如果 變量是(x,y)且x£1但y沒有下限,那麼lb = [1; Inf]。
與線性不等式和等式約束,下界和上界,和非線性不等式和等式約束: [X,FVAL] = fmincon( 'objfun',X0,A,B,AEQ,BEQ,LB,UB ,'constraint')這個調用中的最後一個 輸入參數是函數文件的名稱(在這些註釋中表示爲 約束,並在工作 目錄中保存爲constraint.m),其中非線性約束被編碼。
正如@Franck提到的,你可以在一般使用fmincon
解決優化問題。然而,由於您的問題是一個簡單的線性規劃問題,解決的辦法是要簡單得多(並保證是最優的):
f = -[3 1]; % Note the minus as we want maximization
A = [2 1; 1 3];
b = [6; 9];
LB = [0 0];
[X, FVAL] = linprog(f,A,b,[],[],LB)
會給:
X =
3.0000
0.0000
FVAL =
-9.0000
因此,最好的方法是在點發現( 3,0),結果值爲9.
嘗試help linprog
以瞭解更多關於這個非常有用的功能。
+1用於使用更多特設功能。這樣讀者就可以根據他們的限制來選擇。 –
當然,它會工作,但它似乎有點像矯枉過正使用'fmincon'的LP問題。 –
噢,對,謝謝你指出,我回答了「在Matlab中約束最大化3x + y」,而沒有檢查約束的線性。 –