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

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.算法流程图


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>



  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值