




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
最速下降法 算法原理 最速下降法的搜索法向是目标函数的负梯度方向,最速下降法从目标函数的负梯度方向一直前进,直到到达目标函数的最低点。 已知目标函数在点的梯度为: 当求目标函数的最小点时,由于函数沿负梯度方向下降最快,故在点的探索方向应取该点的负梯度方向,即 显然,为单位向量。这样第次迭代计算所得的新点为 负梯度仅给出了最优化方向,而没有给出步长的大小,所以可能有各种各样的最速下降的过程,它们依赖于的大小。 步长有两种取法: 一种方法是任意给定一个初始步长,使满足条件: 另外一种方法是沿负梯度方向做一维探索,以求解一维最优化问题的最优步长,即对目标函数极小,以得到最优步长: 以此最优步长作为由点出发沿该点的负梯度方向探索的步长。 这种方法的迭代计算的收敛性,可用以下三式中的任一式或二式作为准则来进行判断: 算法步骤 用最速下降法求无约束多维极值问题的算法步骤如下: 取初始点,精度,令 计算搜索方向,其中表示函数在点处的梯度; 若,则停止计算;否则,从出发,沿进行一维搜索,即求,使得。此处的一维搜索可以用黄金分割法等算法,当然也可以用MATLAB的函数; 令,转步骤(2)。 算法的MATLAB实现 在MATLAB中编程实现的最速下降法函数为: 功能:用最速下降法求解多维函数的极值。 调用格式: 其中,:为目标函数; :初始点; :自变量向量; :精度; :目标函数取最小值时的自变量值; :目标函数的最小值。 最速下降法的MATLAB程序代码如下: function[x,minf]=minFD(f,x0,var,eps) %为目标函数:f; %初始点:x0; %自变量向量:var; %精度:eps; %目标函数取最小值时的自变量值:x; %目标函数的最小值:minf; formatlong; ifnargin==3 eps=1.0e-6; end symsl; tol=1; whiletol>eps gradf=-jacobian(f,var);%负梯度方向 v=Funval(gradf,var,x0); tol=norm(v); y=x0+l*v; yf=Funval(f,var,y); [a,b]=minJT(yf,0,0.1); xm=minHJ(yf,a,b);%用黄金分割法进行一维搜索 x1=x0+xm*v; x0=x1; end x=x1; minf=Funval(f,var,x); formatshort; 例: 用最速下降法求函数极小值,取初始点取 解:在MATLAB命令窗口中输入: symsts; f=(t-4)^2+(s+2)^2+1; [x,mf]=minFD(f,[1-3],[ts]) 所得结果为: x= 4.0000-2.0000 mf= 1 例: 试用最速下降法求目标函数的极小值,设初始点;收敛要求。 解:原函数的梯度,在点的梯度为。 梯度的模为 梯度的负方向为 令,求出,算得 梯度的模为 根据收敛准则,,故未达到要求,应继续探索。下一步探索放向为 ,得到 未达到收敛要求,所以还应继续探索,下一步探索方向为 得到: 继续探索,当探索到点时,,达到预定的收敛要求,因而可认为为最优点,而为极小值。

快乐****蜜蜂
实名认证
内容提供者


最近下载