梯度下降法求函数极小值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%%%%%%%%%%%%%% 梯度下降法求函数极小值%%%%%%%%%%%%%%%%%%
% 函数:f(x,y)=(x-2)^2+(y-4)^2
% 目的:求极小值和对应的极小值点坐标
% 方法:梯度下降法
% 理论:
% 方向导数:偏导数反应的是函数沿坐标轴方向的变化率,但许多物理现象告诉我们,只考虑函数沿坐标轴方向的变化率是不够的,有必要研究函数沿任一指定方向的变化率。
% 函数f(x,y)在点P0(x0,y0)可微分,那么函数在改点沿任一方向l的方向导数存在,其值为:
f'x(x0,y0)*cos(α)+f'y(x0,y0)*cos(β),其中,cos(α),cos(β)是方向l
% 的方向余弦。
% 梯度:是与方向导数有关联的另一个概念,梯度是一个向量,表示为:f'x(x0,y0)*i+f'y(x0,y0)*j。
% 关系:
% f'x(x0,y0)*cos(α)+f'y(x0,y0)*cos(β)
% =grad f(x0,y0)*el
% =|grad f(x0,y0)|*cos(θ),其中el=(cos(α),cos(β))是与方向l同方向的单位向量。
% 变化率:函数沿某个方向的变化率指的是函数值沿这个方向变化的快慢。
% θ=0,el与梯度同向,函数增加最快,函数在这个方向的方向导数达到最大值,这个最大值就是梯度的模;% θ=π,el与梯度反向,函数减少最快,函数在这个方向的方向导数达到最小值;
% θ=π/2,el与梯度方向正交,函数变化率为零;
%%
clear
syms x y b
f=2*(x-2)^2+(y-4)^2; %求解函数的极小值点
Grad=[diff(f,x),diff(f,y)]; %求梯度
eps=1e-3;
v=[x,y];
v0=[0,0];
Grad0=subs(Grad,v,v0);%求V0的梯度值
M=norm(Grad0);%梯度的模,方向导数
n=0;
%%
while n<=100
d=-Grad0;%寻优搜索方向
fval=subs(f,v,v0);%函数值
%%
%%%%%%%%%%%%%%%%%%%%%%%求出最优步长,然后确定下一刻的坐标点%%%%%%%%%%%%%%%%%%%%%%%
%设步长变量为b,将v0=v0+b*d带入函数,求导,令导数等于零,解出最佳步长b1,此为一维寻优。得到下一刻坐标点v0=v0+b1*d
ft=subs(f,v,v0+b*d);%将步长变量带入函数
dft=diff(ft);%求导
b1=solve(dft);%得到该方向的最优步长
v0=v0+b1*d; %得到下一刻坐标点
%%
Grad0=subs(Grad,v,v0);%求下一刻梯度
M=norm(Grad0);%求方向导数大小,即梯度的模n=n+1;
end
v0=double(v0);
fval=double(subs(f,v,v0));
disp(v0) %最优解
disp(fval) %f在v0处的最优值