非精确搜索的Armijo准则及Matlab代码
非精确搜索的Armijo准则及Matlab代码
·
问题:
搜索该方程的合适步长
,如今问题已知
,
。
为被求函数
对
向量的梯度
。
下面介绍Armijo准则:
Amijo准则是给定,令步长
,其中
符合下面的公式:
,因为函数
是连续可微的,且符合
,就是函数是符合下降梯度的。
根据以上理论解下面的无约束优化问题:
,
,
其中,
代码流程图:
给出matlab代码如下:
clear
clc
xk=[-1;1];
dk=[1;-2];
mknum=armijo(xk,dk);
function mk=armijo(xk,dk)
a=0.5;
sigma=0.2;
m=0;
while m<=20
if (fun(xk+(a^m)*dk)<=fun(xk)+sigma*(a^m)*gfun(xk)'*dk)
mk=m;
break;
end
m=m+1;
end
a=a^mk;
newxk=xk+a*dk
fk=fun(xk)
newfk=fun(newxk)
end
function f=fun(x)
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
end
function g=gfun(x)
g=[400*(x(1)^3-x(1)*x(2))+2*(x(1)-1);-200*(x(1)^2-x(2))];
end
更多推荐
所有评论(0)