matlab 插值_工程优化设计与Matlab实现——一维搜索方法(二次插值法)

已知是科学,未知是神学,已知和未知之间的是哲学。 ——罗素

上一次讲过了“黄金分割法”缩小单峰区间,值得再次强调的是,“二次插值法”缩小区间的思路也是在每次迭代中将原本的区间分割,然后抛弃掉区间不存在极小值点的那一部分,从而使区间缩小。

二次插值法——不断缩小单峰区间求得极值

首先,让我们重新审视一下进退法求得的单峰区间,我们知道区间的端点值,也知道其中必然存在一个极小值点,也就是说函数在区间内的变化趋势是我们是大体知道的,极小值点左侧递减,在极小值点右侧递增,但是它增大和减小的规律,也就是变化率,是不规律的。

但是,我们可以想到有一种简单的函数,也有着类似的函数形状,那就是二次函数。所以二次插值法的思考方式是这样的,如果我们在[a,b]区间内任取一点c,并求出a、b、c三个点的函数值,那么我们可以利用这三个点确定一个二次函数(即二次插值),这个二次函数是完全已知的,我们可以直接得到这个二次插值函数的极值点。随着区间的不断缩小,插值函数的极小值点与原函数的极小值点的距离会不断缩小,最终会满足我们的精度要求,这就实现了用已知近似未知。

虽然思路是这样,但是具体怎么去划分区间,然后再作出取舍呢?

首先,我们在[a,b]区间内任取一点c,并求出a、b、c三个点的函数值,并计算出二次插值函数和二次插值函数的极小值点d。现在我们就有了区间内的两个点,可以把区间分成三份。我接下来仍然像黄金分割法那样,比较c、d两点的函数值,然后抛弃极值点不在的一侧就好了。

531b1d2464d3f6ca558688085f766dc8.png

有一个问题,d点一定会像上图那样在c点的右边出现么?答案当然是不会,所以我们首先要确定的是d点的c点的相对位置,因为相对位置的不同,会导致取舍区间的不同。一共有下面四种情况。

如果d点在c点的右边,即

,且
,就抛弃ac,下面第一张图;

如果d点在c点的右边,即

,且
,就抛弃db,下面第二张图;

如果d点在c点的左边,即

,且
,就抛弃cb,下面第三张图;

如果d点在c点的左边,即

,且
,就抛弃ad,下面第三张图;

ef87c0e463e5469ccea22ba477644282.png

以上就是二次插值法,再让我们举个栗子

用二次插值法计算目标函数

在单峰区间[-1.1, 2.1]内的极小值点

主程序如下:

clc

函数定义如下:

function

二次插值法函数定义如下:

%-----------二次插值法---主函数-----------%

得出计算结果:

50da6d269e11642783698f65dcc556dd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值