值
f0=ff(1);f2=ff(n+1);f3=ff(n+2);
k=k+1; %记录迭代次数
R(k,:)=[k,x',d',ff]; %保存迭代过程的中间运算结果
if f3
(f0-2*f2+f3)*(f0-f2-delta)^2<0.5*delta*(f0-f3)^2 %判断是否需要对原方向组进行替换
[a(n+1),b(n+1)]=section(x(2*n+1),x(2*n+2),d(2*n+1),d(2*n+2));
alpha(n+1)=ALPHA(x(2*n+1),x(2*n+2),d(2*n+1),d(2*n+2),a(n+1),b(n+1));
x(1)=x(2*n+1)+alpha(n+1)*d(2*n+1); %沿反射方向进行搜索,将搜索结果作为下一轮迭代的始点
x(2)=x(2*n+2)+alpha(n+1)*d(2*n+2);
for i=m:n %根据函数值之差最大值的下标值m,对原方向组进行替换
d(2*i-1)=d(2*i+1);
d(2*i)=d(2*i+2);
end
else
if f2
x(1)=x(2*n+1);
x(2)=x(2*n+2);
else
x(1)=x(2*n+3);
x(2)=x(2*n+4);
end
end
RR(k,:)=alpha; %保存迭代过程的中间运算结果
ff(1)=f(x(1),x(2)); %计算下一轮迭代过程需要的f0值
if
(((x(2*n+1)-x00
(1))^2+(x(2*n+2)-x00(2))^2)^(1/2))
break; %满足进度要求则退出循环迭代过程
end
end
xx=[x(1);x(2)]
fmin=f(x(1),x(2)) %显示最小值及其所对应的坐标