matlab

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,结果不行。要完整的输出才行。

猜你喜欢

转载自blog.csdn.net/LiQingBB/article/details/80217326