一、解决的问题
最速下降法解决的问题是无约束优化问题,比如求如下最小值:
其中函数
二、最速梯度下降法
Step1:设置初始点,给定终止误差
,最大迭代次数N
Step2:for k = 0 to N-1
计算
若,结束,输出
;否则,继续
一维搜索,求,使得
三、例子
求二次函数的最小值,其中A为正定矩阵。
梯度:
负梯度:
迭代公式:
其中,通过
求得:
四、代码
% 最速下降法---目标函数是凸函数时,获得的解是全局解
% 最速下降法---基于一阶导数的迭代方法,以当前位置的负梯度方向作为搜索方向
% 最速下降法---越接近目标值,步长越小,前进越慢
% 最速下降法---解决的问题是无约束优化问题
function x = descent(A,b,x,ep,n)
% A:正定矩阵 b:向量 c:标量 x:初始向量 ep:停止误差 n:最大迭代次数
% 求二次函数f(x)=(1/2)x'*A*x+b'x+c的最小值,A为正定矩阵
for i = 0 : n-1
p = -A * x - b;
if (p' * p <= ep)
break;
end
t = (p' * p) / (p' * A * p);
x = x + t * p;
end
% A = [2,1;1,2];
% b = [1;2];
% x = [0;0];
% ep = 0.00001;
% n = 1000;
% y = descent(A,b,x,ep,n); % [0;-1]