一、多維無約束最小化函數 fminunc
1、函數模型
,式中f(x)爲無約束多變量函數,x是向量或矩陣
2、調用格式
x = fminunc(fun,x0)
matlab代碼
%% 多維無約束極值
f=@(x) (x(1)^2+2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))
x0=[0 0];
[x,favl]=fminunc(f,x0)
%繪製處函數圖形,判斷求解是否正確
X=-10:0.1:10;
Y=X;
[x,y]=meshgrid(X,Y);
f=(x.^2+2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,f)
x = fminunc(fun,x0,options)
syms x y
f=(x^2+2*x)*exp(-x^2-x^2-x*y);
% f=@(x) (x(1)^2+2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))
% x0=[1 1];
% options=optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true)
options=optimoptions('fminunc','Algorithm','quasi-newton','PlotFcns',@optimplotfval)
[x,favl]=fminunc(f,x0,options)
%提供梯度文件
function [f,g]=TD(x)
f = (x(1)^2+2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));
if nargout > 1 % gradient required
g = [exp(- 2*x(1)^2 - x(2)*x(1))*(2*x(1) + 2) - exp(- 2*x(1)^2 - x(2)*x(1))*(x(1)^2 + 2*x(1))*(4*x(1) + x(2))
-x(1)*exp(- 2*x(1)^2 - x(2)*x(1))*(x(1)^2 + 2*x(1))];
end
options=optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true)
x0=[1 1]
[x,favl]=fminunc(@TD,x0,options)
x = fminunc(problem)
problem.options = options;
problem.x0 = [-1,2];
problem.objective = @rosenbrockwithgrad;
problem.solver = 'fminunc';
x = fminunc(problem)
[x,fval] = fminunc(___)
返回極值點函數值fval
[x,fval,exitflag,output] = fminunc(___)
返回一個描述fminunc退出條件的值exitflag,以及一個包含有關優化過程信息的結構輸出。
[x,fval,exitflag,output,grad,hessian] = fminunc(___)
返回梯度grad和海塞矩陣hessian
3、關於meshgrid的一點說明
在畫一個二維圖形或者三維圖形的時候,我們需要指定一個二維平面或者三維空間。就像繪製一維圖形需要指定自變量x的範圍一樣。
X=-10:0.1:10;
Y=X;
[x,y]=meshgrid(X,Y);
f=(x.^2+2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,f)
以如下代碼爲例,其繪製出的圖形的二維平面的範圍與X和Y相同,是一個矩陣,該矩陣如下所示(這裏僅展示x的矩陣)。
二、多維無約束最小化函數 fminsearch
1、目標模型
其目標模型與fminunc相同,不同的是該函數使用無導數方法查找無約束的多元函數的最小值,而fminunc使用有導數方法。
2、調用格式
x = fminsearch(fun,x0)
f=@(x) (x(1)^2+2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))
x0=[0 0];
[x,fval]=fminsearch(f,x0)
x = fminsearch(fun,x0,options)
% 顯示函數值的求解
x0=[0 0];
options = optimset('PlotFcns',@optimplotfval);
[x,fval]=fminsearch(@demo_9_28_1,x0,options);
x = fminsearch(problem)
返回極值點x
[x,fval] = fminsearch(___)
返回極值點函數值fval
[x,fval,exitflag] = fminsearch(___)
返回一個描述退出條件的值exitflag。
[x,fval,exitflag,output] = fminsearch(___)
返回帶有有關優化過程信息的結構輸出output。
三、多維無約束最小化函數 fmincon
1、目標模型
min
s.t A*x<=b 線性不等式約束
Aeq*x=beq 線性等式約束
c(x)<=0 非線性不等式約束
ceq*x=0 非線性等式約束
lb=<x<=ub 最優解x的上下界
2、調用格式
x = fmincon(fun,x0,A,b) 線性不等式約束
f=@(x) -x(1)*x(2)*x(3);
A=[-1 -1 -1;1 2 2]
b=[20 5]
x0=[1 1 1];
[x,fval]=fmincon(f,x0,A,b,[],[])
x = fmincon(fun,x0,A,b,Aeq,beq) 線性不等式約束+等式約束
f=@(x) -x(1)*x(2)*x(3);
A=[-1 -1 -1;1 2 2]
b=[20 5]
x0=[1 1 1];
Aeq=[1 1 0];
beq=4
[x,fval]=fmincon(f,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 線性不等式約束+等式約束+x的上下界
f=@(x) -x(1)*x(2)*x(3);
A=[-1 -1 -1;1 2 2]
b=[20 5]
x0=[1 1 1];
Aeq=[1 1 0];
beq=4
lb=[4 2 1]
[x,fval]=fmincon(f,x0,A,b,Aeq,beq,lb)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 線性不等式約束+等式約束+x的上下界+非線性約束
function [c,ceq]=con(u) %非線性約束函數文件
x=u(1);
y=u(2);
z=u(3);
c=[];
ceq=x*y+x*z+y*z-80;
f=@(x) -x(1)*x(2)*x(3);
x0=[5 5 5];
[x,fval]=fmincon(f,x0,[],[],[],[],[],[],@con)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 線性不等式約束+等式約束+x的上下界+非線性約束+選項設置
function [f,g]=con1(u) %函數與梯度的.m文件
x=u(1);
y=u(2);
z=u(3);
f=-x*y*z;
if nargout > 1 % gradient required
g = [-y*z
-x*z
-x*y;];
end
function [c,ceq]=demo_9_29_1(u)
x=u(1);
y=u(2);
z=u(3);
c=[];
ceq=x*y+x*z+y*z-80;
end
%% 提供梯度
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
syms x y z
ff=-x*y*z;
g=gradient(ff);
x0=[5 5 5];
[x,fval]=fmincon(@con1,x0,[],[],[],[],[],[],@con)
x = fmincon(problem)
[x,fval] = fmincon(___) 返回最優解x和該點函數值fval
[x,fval,exitflag,output] = fmincon(___) 返回函數退出條件exitflag和
有關優化過程信息的結構輸出output
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)