MATLAB:非線性規划fmincon


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]

 

1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM