1. 程式人生 > >matlab 有約束與無約束優化求解 optimization

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)