matlab代码
x=linspace(0,15);
y=(x-1).(x-3).(x-9).(x-12);
plot(x,y);%画函数图像
%将坐标轴平移到原点
ax = gca;
ax.XAxisLocation = ‘origin’;
ax.YAxisLocation = ‘origin’;
%将坐标轴平移到原点
xlabel(‘x’);
ylabel(‘y’);
hold on;
syms X F X0 X1 alpha beta m sigma g d;
m=0;beta=0.5;sigma=0.2;%设置Armijo准则的步长alpha、beta、m、sigma
F=@(X)(X-1)(X-3)(X-9)(X-12);
X0=4;
Y0=double(F(X0));
plot(X0,Y0,‘‘);%画初始迭代点的位置
hold on;
%求在迭代点的梯度g
g=jacobian(F,X)’;
g=double(subs(g,X,X0));
%求在迭代点的搜索方向d
d=-1jacobian(F,X)’;
d=double(subs(d,X,X0));
while m <= 20 %限制步长不要太小
alpha = beta^m;%步长迭代公式,当m=0时,步长为1;
X1 = X0 + alphad;%下一个迭代点更新公式
Y1=double(F(X1));
if Y1 <= Y0+sigma(beta^m)*g’*d %armijo准则条件
break;
else
m=m+1;
end
end
hold on;
plot(X1,Y1,‘+’);
alpha
alpha =
0.0156