matlab 有約束與無約束優化求解 optimization
阿新 • • 發佈:2019-01-04
①求有最小值,
其中:
②求無約束最小值:
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)