梯度下降法求函数极小值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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处的最优值

相关文档
最新文档