matlab中fmincon函數


Matlab求解非線性規划,fmincon函數的用法總結

1.簡介

在matlab中,fmincon函數可以求解帶約束的非線性多變量函數(Constrained nonlinear multivariable function)的最小值,即可以用來求解非線性規划問題

matlab中,非線性規划模型的寫法如下

2.基本語法

[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

x的返回值是決策向量x的取值,fval的返回值是目標函數f(x)的取值

fun是用M文件定義的函數f(x),代表了(非)線性目標函數

x0是x的初始值

A,b,Aeq,beq定義了線性約束 ,如果沒有線性約束,則A=[],b=[],Aeq=[],beq=[]

lb和ub是變量x的下界和上界,如果下界和上界沒有約束,則lb=[],ub=[],也可以寫成lb的各分量都為 -inf,ub的各分量都為inf

nonlcon是用M文件定義的非線性向量函數約束

options定義了優化參數,不填寫表示使用Matlab默認的參數設置

3.實例一

示例,求下列非線性規划:

(1)編寫M函數fun1.m 定義目標函數:

function f=fun1(x); f=x(1).^2+x(2).^2+x(3).^2+8;

(2)編寫M函數fun2.m定義非線性約束條件:

function [g,h]=fun2(x); g=[-x(1).^2+x(2)-x(3).^2 x(1)+x(2).^2+x(3).^3-20]; %非線性約束部分小於0的式子 h=[-x(1)-x(2).^2+2 x(2)+2*x(3).^2-3];  %非線性部分等於0的部分

(3)編寫主程序函數

[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

所得結果為:

x1=0.5522,x2=1.2033,x3=0.9478
y=10.651

4.實例二:

用著名的Rosenbrock's banana函數做例子吧,當然這個例子也是matlab文檔里面改過來的的

[公式]

我們給出如下的約束條件:

1、[公式]

2、[公式]

3、 [公式] 在以(1/3,1/3)為圓心,1/3為半徑的圓內 ,就是:

[公式]

4、 [公式]

5、 [公式]

然后,求 [公式] 的最小值

然后,我們用fmincon解決

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

也就是說,我們的目標函數長這個樣子:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

線性約束部分:

lb = [0,0.2]; ub = [0.5,0.8]; A=[1,1;1,2]; b=[2;3];

非線性約束部分:

function [c,ceq] = circlecon(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; % 默認為小於等於0 ceq = [];  % 不存在等式限制

在可行域內選一個點作為迭代起始點:

x0 = [1/4,1/4];

然后開始求解:

nonlcon = @circlecon; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

最后得到

x = 0.5000 0.2500 

也就是 [公式] , [公式]

轉自:https://www.cnblogs.com/goodtwo/p/11146540.html
鏈接:https://www.zhihu.com/question/57557247/answer/332589995


免責聲明!

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



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