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) 

你可能感兴趣的:(MATLAB)