采用Armjio非精确线搜索准则的最速下降法--MATLAB实现
Posted Z.Q.Feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采用Armjio非精确线搜索准则的最速下降法--MATLAB实现相关的知识,希望对你有一定的参考价值。
Armjio线搜索求步长
可参靠作者另外一篇博客:采用非精确线搜索求步长的Armjio准则–MATLAB实现
最速下降法
代码如下:
function [f, xk, k] = SD(x0, fun, grid, eps, kmax)
%
% function [f, xk, k] = SD(x0, fun, grid, eps, kmax)
% 求出函数fun从初始点x0处以负梯度方向为下降方向,
% 采用 Armjio 准则计算迭代步长,求出函数的极小点
% ---------------------------------------------------
% 输入:
% x0 初始点(列向量)
% fun 函数文件名称(字符变量)
% grid 梯度函数文件名称(字符变量)
% eps 函数在迭代点处的下降方向(列向量)
% kmax 函数的最大迭代次数
%
% 输出:
% f 函数在极小值 xk 处的目标函数值
% xk 函数采用此方法求得的极小点
% k 求极小点算法迭代次数
% ---------------------------------------------------
% by Zhi Qiangfeng
%
k = 0;
xk = x0;
gk = feval(grid, xk);
while k <= kmax
if norm(gk) < eps
break;
end
dk = -gk; % 选取此处的负梯度方向作为下降方向
% 采用 Armjio 准则求步长
alpha = Armjio(fun, grid, xk, dk);
xk = xk + alpha * dk; % 更新迭代点
gk = feval(grid, xk); % 更新梯度值
k = k + 1;
end
f = feval(fun, xk);
end
输出示例
>> x0 = [10; 1];
>> eps = 1e-4;
>> kmax = 10000;
>> [f, xk, k] = SD(x0, "fun", "grid", eps, kmax)
f = 0.000000020329
xk =
0.99986
0.99957
k = 2238
>>
附
最优化相关算法设计数学原理:最优化/Optimization文章合集
有帮助可以点赞哦,谢谢大家的支持~
以上是关于采用Armjio非精确线搜索准则的最速下降法--MATLAB实现的主要内容,如果未能解决你的问题,请参考以下文章
采用Armjio非精确线搜索求步长的FR非线性共轭梯度法--MATLAB实现
采用Armjio非精确线搜索求步长的FR非线性共轭梯度法--MATLAB实现
采用非精确线搜索求步长的Armjio准则--MATLAB实现