最优化算法------无约束一维极值


在介绍无约束一维极值问题之前,说明一下什么是无约束一维极值,简单表述为

在这里插入图片描述
以下各种方法的MATLAB代码实现均不给出,如果有需要仔细研究学习的可以私信我,我看到后尽量立刻MATLAB编程回复给需要的人。

1. 进退法

进退法是用来确定包含极小点区间的算法,它的理论依据为: f ( x ) f(x) f(x)为单谷函数,且 [ a , b ] [a,b] [a,b]为其极小点的一个搜索区间,对于任意的 x 1 , x 2 包 含 于 [ a , b ] x_1,x_2包含于[a,b] x1,x2[a,b],如果 f ( x 1 ) < f ( x 2 ) f(x_1)<f(x_2) f(x1)<f(x2),则 [ a , x 2 ] [a,x_2] [a,x2]为极小点搜索区间,否则为 [ x 1 , b ] [x_1,b] [x1,b]。因此在进行MATLAB编程时,输入量必须有初始点 x 0 x_0 x0和初始搜索步长 h 0 h_0 h0,而且需要给定精度跳出迭代,返回搜索区间。

2. 黄金分割法

黄金分割法也叫0.618法,它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点在这个区间内,却不知道具体是哪一个点。黄金分割法思想很直接,既然极小点包含于区间内,那么可以不断地缩小搜索区间,就可以使搜索区间的端点逼近到极小点。如图所示, [ a , b ] [a,b] [a,b]为搜索区间,黄金分割法首先根据黄金比例产生两个内点 x 1 , x 2 x_1,x_2 x1,x2
在这里插入图片描述
然后根据 f ( x 1 ) , f ( x 2 ) f(x_1),f(x_2) f(x1),f(x2)大小关系来重新选择搜索区间。
1.若 f ( x 1 ) < f ( x 2 ) f(x_1)<f(x_2) f(x1)<f(x2),则搜索区间变为 [ a , x 2 ] [a,x_2] [a,x2]
2.若 f ( x 1 ) > f ( x 2 ) f(x_1)>f(x_2) f(x1)>f(x2),则搜索区间变为 [ x 1 , b ] [x_1,b] [x1,b]
在这里插入图片描述
MATLAB编程时需输入区间端点信息和精度值,返回极小点值和对应的目标函数值。

3. 斐波那契法

斐波那契法也是一种区间收缩算法,但是和黄金分割法不同的是,黄金分割法每次只改变搜索区间的一个端点,属于单向收缩法,而斐波那契法同时改变搜索区间的两个端点,是一种双向收缩法。MATLAB编程和黄金分割法差异不大。

4. 牛顿法

牛顿迭代法求无约束一维极值问题的速度相当快,而且还有一个好处就是能高度逼近最优解,而不会出现死等待现象。基本牛顿法是一种使用导数的算法,它每一步的迭代方向都是沿着当前点函数值下降的方向,因此可以看出,算法的有效性严重依赖于初始点的选择,初始点选的好,能够很快的逼近极小点。基本迭代公式为
在这里插入图片描述
MATLAB编程时只需要一个初始点和精度和目标函数作为输入即可,返回自变量值和目标函数值。

5. 割线法

和牛顿法不同的是,割线法用的下降方向是导数的割线方向,基本迭代公式为
在这里插入图片描述
因此MATLAB编程需要两个初始点值。

6. 抛物线法

抛物线法也叫二次插值法,它的理论依据为二次多项式可以在最优点附近较好的逼近函数的形状,做法是在函数的最优点附近取三个构造点,然后用这三个点构造一条抛物线,把这条抛物线的极值点作为函数的极值点的近似。每次构造一条抛物线后,抛物线的极值点就可以作为一个新的构造点,新的构造点与原来的三个构造点经过某种算法,得到下一步抛物线逼近的三个构造点,这就是抛物线法的算法过程。抛物线法可以求得精度较高的解,但是速度会比较慢,因此先用其他方法求得一个比较小的极值区间后再用抛物线法比较好。

7. 三次插值法

三次插值法也是在函数的最优点附近取三个构造点,然后用这三个点构造一条三次曲线,把这条曲线的极值点作为函数的极值点的近似。由于这三个点不能唯一决定一条三次曲线,因此还要加上某个点的导数条件。三次曲线的极值点有两个,只有满足二阶导数大于0的极值点才作为函数极值点的近似。显然,它和抛物线法的思想其实是一样的,因此它们都可以求得精度较高的解,但三次插值法速度更慢。

猜你喜欢

转载自blog.csdn.net/woaiyyt/article/details/113771026
今日推荐