www.gusucode.com > 《图像配准技术及其Matlab编程实现》--源码程序 > 《图像配准技术及其Matlab编程实现》/match/GoldSectionOptimize.m

    function [minfx,x]=GoldSectionOptimize
%%进退法确定搜索区间
x1=rand;
h=0.1;
L=0.0001;
Fx1=Fx(x1);
k=0;
while(1)
    x4=x1+h;
    Fx4=Fx(x4);
    k=k+1;
    if Fx4<Fx1
        x2=x1;
        x1=x4;
        Fx2=Fx1;
        Fx1=Fx4;
        h=2*h;
    else
        if k~=1
            x3=x2;
            x2=x1;
            x1=x4;
            if x1<=x3
                a=x1; %确定搜索区间[a b]
                b=x3;
            else
                a=x3;
                b=x1;
            end
            break;
        else
            h=-h;
            x2=x4;
            Fx2=Fx4;
        end
    end
end

%黄金分割法搜索
landa=a+0.382*(b-a);
mu=a+0.618*(b-a);
flanda=Fx(landa);
fmu=Fx(mu);
n=0;
while(1)
    if b-a<L
        a=a;
        b=b;
        x=(b+a)/2;
        break;
    end
    if flanda>fmu
        flanda=fmu;
        a=landa;
        b=b;
        landa=mu;
        mu=a+0.618*(b-a);
        fmu=Fx(mu);
    else
        fmu=flanda;
        a=a;
        b=mu;
        mu=landa;
        landa=a+0.382*(b-a);
        flanda=Fx(landa);
    end
end
minfx=Fx(x);  %返回目标函数最小值

function [y]=Fx(x);
y=(x+500)^2+5;