①求有最小值,
其中:
②求無約束最小值:
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)