gold 函数如下:
function [ as,x,f,k ] = gold( func,x0,d0,amin,amax,t )
%YIWEIXIANXING 此处显示有关此函数的摘要%函数调用格式[最优步长a,下一个x,对应的函数值f,迭代次数k]=gold(@func,x0,d0,amin,amax,t)
%func目标函数
%x0初始值
%d0初始方向
%amin步长下界
%amax步长上界
%t误差范围
% 此处显示详细说明
rate=2/(1+sqrt(5));
k=0;
amink=amin;
amaxk=amax;
l=rate*(amaxk-amink);
alk=amaxk-l;
ark=amink+l;
xlk=x0+alk*d0;
xrk=x0+ark*d0;
flk=func(xlk);
frk=func(xrk);
while abs(amaxk-amink)>t
k=k+1;
if (flk<=frk)
amaxk=ark;
l=rate*(amaxk-amink);
ark=alk;
frk=flk;
alk=amaxk-l;
xlk=x0+alk*d0;
flk=func(xlk);
else
amink=alk;
l=rate*(amaxk-amink);
alk=ark;
flk=frk;
ark=amink+l;
xrk=x0+ark*d0;
frk=func(xrk);
end
end
as=0.5*(amaxk+amink);
x=x0+as*d0;
f=func(x);
end
当输入
>> gold( f_test2,[1,1],[1,1],0,2,1e-15 )
错误使用 f_test2 (line 4)
输入参数的数目不足。
当输入
[as x f k]=gold(@booth,[1,1],[1,1],0,2,0.000001)
as =
1.0000
正确输入应该是
>> [as x f k]=gold(@f_test2,[2,2],[-1,-1],0,2,1e-6)
as =
2.0000
x =
1.0e-06 *
0.3322 0.3322
f =
-1.0000
k =
31
函数的输出也要赋值,很奇怪,我以为会是直接输出ans,结果不行。要完整的输出才行。