应用进退法确定一维搜索区间_【优化】一维搜索方法案例

本文使用Matlab实现了一些一维搜索方法,作为上一篇文章理论部分的实现。文中最后还实现了在多维搜索方法,在多维搜索方法中调用linesearch_secant方法实现割线法作为一维搜索部分。

案例1——一维搜索方法

函数为:

,log为自然对数。
  • 利用MATLAB绘制函数在区间[1,2]上的变化曲线,验证在该区间上是单峰的。
  • 利用黄金分割法把区间压缩到长度只有0.23,给出所有中间结果。
  • 使用斐波那契法实现,其中
    ,列出中间结果。

画函数图像f.m:

% f.m

函数图像为:

5b81182d19d9d9ed975f6ebd0ef0c09a.png

利用黄金分割法实现:

%Matlab routine for Golden Section Search

黄金分割法中间结果为:

792e76c80c8f5fc39cf64db9d7de3ec3.png

利用斐波那契数列法实现:

%Matlab routine for Fibonacci Search technique

斐波那契数列法中间结果:

8ecef91b79b5d3d7fef0ea35003f7fd9.png

案例2——多维搜索方法中的一维搜索方法

利用最速下降法求解下个函数极小值:

停止规则为

,初始点为[-4,5,1]。

1.函数设置(g.m)

function

2.一维搜索方法设置(linesearch_secant.m)

function

注意在一维搜索方法中法采用的是割线法,回顾一下割线法使用迭代算法:

将等式右边进行通分化简、再将更新参数设置为alpha之后便可以得到代码中的迭代公式。

3.最速梯度下降法

这个案例采用最速下降法来作为多维搜索算法,最速下降法为梯度下降法的一种具体实现,它的基本理念为:为每次迭代选择合适的步长使得目标函数能够最大程度的减到最小。它的运行方式为:从迭代点出发,沿着负梯度方向开展一维搜索,直到找到步长的最优值,则确定新的迭代点。一个最速下降法的运行方式示例如下图:

757fae7f36e201611cea4270a2f878d2.png

再来回顾一下多维搜索方法中的一维搜索方法:

44fabd675bccd9d81be322ea0195cd3f.png

可以看出,当前的迭代点和搜索方向确定之后,迭代点只能想确定方向移动(红色框内的直线),此时一维搜索方法就是找到移动方向上对应多维目标函数(红色框内的红色曲线)的最小值。

function

在命令行使用如下语句运行程序:

options

最终结果为:

e8d4f019917314798a0e7f3417bc6fdb.png

欢迎关注公众号:慢慢学算法

596d7c491e0b5ee5f7ed0c89dd3488dc.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值