非精确搜索的Armijo准则及Matlab代码

问题:f(x)=0

搜索该方程x_{k+1}=x_{k}+\alpha _{k}p_{k}的合适步长\alpha _{k},如今问题已知x_kp_k

p_k为被求函数fx向量的梯度J

下面介绍Armijo准则:

Amijo准则是给定\beta \in (0,1),\delta \in(0,0.5),令步长\alpha _{k}=\beta ^{m_{k}},其中m_{k}符合下面的公式:

f(x_{k}+\beta ^{m}d_{k})\leq f(x_{k})+\delta \beta ^{m}J^{T}d_{k},因为函数f(x)是连续可微的,且符合J^{T}d_{k}< 0,就是函数是符合下降梯度的。

根据以上理论解下面的无约束优化问题:

\underset{x\in R^{2}}{minf(x)}=100(x_{1}^{2}-x_{2})^{2}+(x_{1}-1)^{2}x_k=\begin{bmatrix} -1\\1 \end{bmatrix}p_{k}=\begin{bmatrix} 1\\ -2 \end{bmatrix}

其中,g=\begin{bmatrix} \frac{\partial{f}}{\partial{x_1}} \\ \frac{\partial{f}}{\partial{x_2}} \end{bmatrix}

代码流程图:

给出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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值