📄 twopoint20.m
字号:
function twopoint20
%TWOPOINT20 Two point step size gradient methods 两点步长梯度法2
%参考文献:J. Barzilai and J. M. Borwein Two point step size gradient methods
%IMA Journal of Numerical Analysis Vol .8 pp. 141-148 ,1998
%By:Ji Lin
%Email: linji@live.com
%Blog: http://linji526.spaces.live.com
%Date: 2007,2008/08/18
syms x1 x2 x3 x4 real
x=[x1 x2 x3 x4]';
A=diag([20,10,2,1]);
b=[1,1,1,1]';
fx=x'*A*x./2-b'*x;
xk(:,1)=[0,0,0,0]';xk(:,2)=[0,0,0,0]';
e=10^(-8);
k=3;alpha(2)=1;
for ii=1:4
gx(ii)=diff(fx,x(ii));
end
gx=gx';
gk(:,1)=subs(gx,{x1,x2,x3,x4},{xk(1,1),xk(2,1),xk(3,1),xk(4,1)});
gk(:,2)=subs(gx,{x1,x2,x3,x4},{xk(1,2),xk(2,2),xk(3,2),xk(4,2)});
xk(:,3)=-gk(:,2);
flag=1;
while flag
gk(:,k)=subs(gx,{x1,x2,x3,x4},{xk(1,k),xk(2,k),xk(3,k),xk(4,k)});
alpha(k)=(xk(:,k)-xk(:,k-1))'*(xk(:,k)-xk(:,k-1))/((xk(:,k)-xk(:,k-1))'*(gk(:,k)-gk(:,k-1)));
xk(:,k+1)=xk(:,k)-alpha(k).*gk(:,k);
if norm(gk(:,k))<=e
flag=0;
else
k=k+1;
end
end
gk(:,k+1)=subs(gx,{x1,x2,x3,x4},{xk(1,k+1),xk(2,k+1),xk(3,k+1),xk(4,k+1)});
for ii=1:k
normgk(ii)=norm(gk(:,ii));
Gk(ii)=norm(gk(:,ii+1))^2/(norm(gk(:,ii))^2);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -