matlab 有約束與無約束優化求解 optimization

①求有最小值,minf(x)s.t.xy/2+(x+2)2+(y2)2/22
其中:f(x)=xe(x2+y2)+(x2+y2)/20
②求無約束最小值:
minf(x)=xe(x2+y2)+(x2+y2)/20

clear all,close all,clc
%①求有約束c≤0, ceq=0條件下的函數最小值:
%
%待優化的函數
fun=@(x) x(1)*exp(-(x(1)^2+x(2)^2))+(x(1)^2+x(2)^2)/20;
%約束不等式函數c≤0
g = @(x) x(1)*x(2)/2+(x(1)+2)^2+(x(2)-2)^2/2-2;
%約束函數,利用deal函數返回不等式c和等式ceq。其中:c≤0, ceq=0
gfun =@(x) deal(g(x),[]);
x0=[-2,1]; %搜索初值, X0爲行向量,也可以是列向量 
%優化選項,包括算法interior-point                 
options=optimoptions('fmincon','Algorithm','interior-point','display','iter'); 
[x,fval,exitflag,output]=fmincon(fun,x0,[],[],[],[],[],[],gfun,options)  %調用有約束函數fmincon求最小值。


%求無約束函數最小值
%優化選項,包括算法quasi-newton
options=optimoptions('fminunc','Algorithm','quasi-newton','Display','iter');
%調用無約束函數fminunc求最小值。
[x,fval,exitflag,output]=fminunc(fun,x0,options) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章