一维搜索算法——黄金分割法原理与实现

1.算法原理

设目标函数为F(x),则黄金分割算法的实现过程如下:
(1)给定初始区间[a1,b1],精度要求tol>0,黄金分割系数T=0.618,k=1。
(2)令c1=a1+(1-T)(b1-a1),d1=b1-(1-T)(b1-a1),计算Fc=F(c1),Fd=F(d1)。
(3)若b(k+1)-a(k+1) >= tol,转到步骤(4),否则停止搜索,得到的结果为(a(k+1)+b(k+1))/2。
(4)若Fc<Fd,转到(5);否则转到(6)。
(5)a(k+1)=a(k);b(k+1)=d(k);d(k+1)=c(k),Fd=Fc;令c(k+1)=a(k+1)+(1-T)(b(k+1)-a(k+1));计算Fc=F(c(k+1)),转到(7)。
(6)a(k+1)=c(k);c(k+1)=d(k);b(k+1)=b(k),Fc=Fd;令d(k+1)=b(k+1)- (1-T)(b(k+1)-a(k+1));计算Fd=F(d(k+1)),转到(7)。
(7)置k=k+1;返回(3)。

2.算法流程图

一维搜索算法——黄金分割法原理与实现_第1张图片

3.算法实现

<span style="font-size:18px;">%Gold Segment
a = 1;
b = 4;
Err = 0.001;
T = 0.618;
c = a+(1-T)*(b-a);
d = b-(1-T)*(b-a);
Fc = Fx(c);
Fd = Fx(d);
while(1)
    if(abs(b-a)<Err)
        x=0.5*(a+b);
        break;
    end
    if(Fc<Fd)
        a = a;
        b = d;
        d = c;
        Fd = Fc;
        %%%%%%%%%
        c = a+(1-T)*(b-a);
        Fc = Fx(c);
    else %Fc>Fd
        b = b;
        a = c;
        c = d;
        Fc = Fd;
        %%%%%%%%%%
        d = b-(1-T)*(b-a);
        Fd = Fx(d);
    end    
end
x
minFx = Fx(x)

function y = Fx(x)
y = x*x-6*x+9;
end
</span>
输出结果:
<span style="font-size:18px;">x =
    3.0000

minFx =
   3.8376e-11</span>



你可能感兴趣的:(一维搜索算法——黄金分割法原理与实现)