无约束一维极值——黄金分割法

黄金分割法适用于已知极值区间的前提下,利用不断缩小区间的思想,最终得出极值的近似值。该方法只是要求函数单峰,可以不连续。因此,这种方法的适应面非常广泛。

黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点a1,a2,并计算其函数值。a1,a2 将原来区间分成三段,再应用函数的单峰性质,通过函数值大小的比较,删除其中一段,使搜索区间得以缩小。然后在保留下来的区间上作同样的处理,如此迭代下去,使搜索区间无限缩小,从而得到极小值点的数值近似解

黄金分割法是用于一元函数f(x)在给定的初始区间[a,b]内搜索极小值点a"的一种方法。它是优化计算中的经典算法,以算法简单收敛速度均匀、效果较好而著称,是许多优化算法的基础。但它只适用于一维区间上的凸函数,即只在单峰区间内才能进行一维寻优,其收敛效率较低。其基本原理是依照去劣存优原则,对称原则以及等比收缩原则来逐步缩小搜索区间。

黄金分割法的基本步骤如下:

  1. 给定区间[a,b]及eps>0;
  2. 计算r= a+0.382(b-a),u= a+0.618(b-a);
  3. 若 f® > f(a),则进行下一步,否则直接进行第(5)步;
  4. 若u - r< eps,则停止计算,输出x" =u , f" = f(u).否则令a=r,r= u,u = a+0.618(b-a),转人第(3)步;
  5. 若u-r <eps,则停止计算,输出x" =r,f"= f®,否则令 b=u,u=r,r=a +0.382(b-a),转入第(3)步。

根据以上步骤,编写黄金分割算法的MATLAB代码如下:

function [x, fval, iter]= HJ(a,b) 
    iter= 0;
    while abs(b-a) > 1e-5
        iter= iter + 1;
        lambda = a+ 0.382*(b-a);
        miu= a+0.618* (b-a);
        [dy, f1] = funHJ(lambda);
        [dy, f2] = funHJ(miu); 
        if f1> f2
            a = lambda; 
            disp( ['the ' ,num2str(iter) ' iteration search area is :[',num2str(a) ',',num2str(b) ']'])
        else
            b = miu;
            disp( ['the ' ,num2str(iter) ' iteration search area is :[',num2str(a) ',',num2str(b) ']'])
        end
    end
    x=(a+ b)/2;
   [dy, fval] = funHJ(x); 
end

例 根据黄金分割算法编写程序,求函数f(x)= (sinx)6*[tan(1-x)]e30x在区间[0,1]上的极大值。

解:令g(x) = -f(x) = - (sinx)6*[tan(1- x)]e30x ,求ming(x)。x∈ [0.1]
编写函数代码如下:

function [dy, val]= funHJ(x)
    val = -((sin(x))^6* tan(1-x) * exp(30* x));
    dy = -(6* (sin(x))^5 * cos(x)* tan(1-x)*exp(30*x) +...
    (sin(x))^6* (1/cos(1-x))^2*(-1) * exp(30*x) + (sin(x))^6* tan(1-x) * exp(30*x)*30);
end
clear all
clc
[ x, fval,iter]= HJ(0,1)

运行结果
在这里插入图片描述
在这里插入图片描述
即min g(x)值为 -4.1086e+10。x∈(0,1)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值