1.非線性規劃的形式:
其中x是一個列向量,st中前兩項為線性限制條件,後兩項為非線性限制條件。
在MATLAB中fmincon是用于求解非線性多遠函數的最小值的函數,這裡介紹fmincon的其中一種文法格式:
[x,fval,exitflag,output]=fmincon[目标函數f(x)調用,x的初值,A,b,Aeq,beq,lb,ub,非線性限制函數調用]。
如果最終算出的exitflag=1,即過程成功收斂的話,x的初值在指派時是不受影響的。
且:
1----A,b,Aeq,beq分别為線性限制條件不等式的系數矩陣,線性限制條件不等式中的右值,線性限制條件燈飾的系數矩陣和線性限制條件等式中的右值。lb,ub分别為x的最小值和x的最大值。以上如果有不存在的項用[]表示。
2----fmincon需要用到函數的調用
建立目标函數方式如下:a.建立一個m檔案,作為目标函數的存放地點。
b.輸入:function f=檔案名(x)【這裡f是函數傳回的函數值,x是一個列向量】
f=目标函數f(x)
end
c.【點選儲存時檔案會自動改成在a步設定的名字】
封裝非線性的限制函數方式如下:a.建立一個m檔案,作為非線性的限制函數的封裝地點。
b.輸入: function [h,g]=檔案名(x)
h=c(x)
g=ceq(x)
end
c.【此處h為非線性不等式的限制條件,g為非線性等式的限制條件。當限制條件不止一個是可以寫成h(1),h(2)...,g(1),g(2)...的形式。同理,x代表一個列向量,當列向量有多個元素時也要寫成x(1),x(2)的形式。】
下面舉個例子:
.
程式:
1.目标函數的引用:檔案:myfun1.m
function f=myfun1(x)【注意這個地方後面不能加分号】
f=x(1)^2+x(2)^2+8;
end
2.非線性限制函數的引用:檔案:myfun2.m()
function [h,g]=myfun2(x)
h=-x(1)^2+x(2);
g=-x(1)-x(2)^2+2;
end
以上的x都代表向量[x1,x2],但不能這樣寫
主函數:
[x,fval,exitflag,output]=fmincon('myfun1',[0 1],[],[],[],[],zeros(2,1),[],'myfun2')
運作結果:
x =
1.0000 1.0000
fval =
10
exitflag =
1
output =
iterations: 8
funcCount: 36
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 1.3655e-007
cgiterations: []
message: [1x144 char]
轉載于:https://www.cnblogs.com/qxpdbk/p/5671023.html