零、写在前面
本文主要讲述三次Hermite插值和三次样条插值。
对于一维插值算法没有详细介绍,只是说明了彼此之间的区别和特点,并作出选择。
随后拓展了n维插值算法,只作为了解。
最后,由于插值算法本身的特性,其也可以用来预测。
一、作用
插值算法,预测模型。
在建模过程中,需要一定量的数据作为分析的支撑,但有时数据较少,此时便需要使用一些数学手段,模拟产生一些可靠的新数据来满足需求。
二、算法
2.1介绍
设函数在上有定义,且定义域内存在n+1个点。
若恰好穿过n+1个点,则称其为插值函数,不难发现,插值函数不唯一。
为插值节点,包含插值节点的称作插值区间,即。
求出的过程称之为插值法。
2.2详细讲述一维插值法
2.2.1runge现象(一切问题的本源)
runge现象,是指高次插值函数在边界部分会出现震荡现象,其原因是次数太高会放大误差。
2.2.2插值法的分类
拉格朗日插值,牛顿插值,分段插值,埃尔米特插值(Hermite),分段三次埃尔米特插值,三次样条插值。
2.2.3插值法的选择
其中建模过程中常用的是分段三次埃尔米特插值和三次样条插值。
Q:这时候就有人要问了,作者作者,为什么是这样啊?
A:首先,所有的高次插值函数都会发生runge现象,这样大规模的震荡是我们不希望看到的。
Q:哪些插值法会发生runge现象?
A:拉格朗日,牛顿,埃尔米特都会发生runge现象,因为他们本质是多项式插值函数,都是高次的,这三个插值法的表达式和原理我这里不展开讲,因为用不上。
Q:那么怎么避免发生runge现象?
A:runge现象发生在边界,边界越宽,震荡幅度越大,那么我们把边界变小,那就是分段插值了,与其说分段插值是插值法,更不如说是一种思想,就是把插值区间切成很多小段,大幅度缓解runge现象,然后在这些小段上放上合适的函数。所以分段插值是解决runge现象的一个好办法。
Q:为什么只有分段的埃尔米特插值(即分段三次埃尔米特插值),没有分段拉格朗日插值和分段牛顿插值?
A:事实上也有分段拉格朗日插值和分段牛顿插值,但是为什么不说,本质上是这俩插值是不够完美的。因为拉格朗日插值和牛顿插值是源于函数值的,就是零阶导数,这两个插值法只关注零阶导数,但对变化趋势,即一阶导数是欠缺考虑的。而埃尔米特插值法受到了零阶导数和一阶导数的约束,如此得到的插值函数是保留被插值函数的性态(可以肤浅的理解为一阶导数)的,更接近完美,当然不是完美本身。所以我们在建模过程中会使用分段三次埃尔米特插值。
Q:什么是三次样条插值?
A:是分段三次埃尔米特插值+在插值区间上二阶连续可微,其本质是三次多项式。由于多加了一个二阶连续可微的条件,所以三次样条插值是比分段三次埃尔米特插值更接近完美的存在。
S:总结
客观出现runge现象,为了缓解runge现象,我们提出使用分段插值,分段插值具体要和哪个插值法结合,为了保留被插值函数的性态,我们使用埃尔米特插值,因为它保留了被插值函数的一阶导数。
三、代码
3.1分段三次埃尔米特插值
%MATLAB内置函数
%分段三次Hermite插值多项式PCHIP
p = pchip(x,y,new_x)
%x已知样本点的横坐标 y已知样本点的纵坐标 new_x要插入处对应的横坐标
%eg:
x = -pi:pi;%不写步长默认1为步长,所以,-pi:pi=-pi:1:pi
y = sin(x);
new_x = -pi:0.1:pi; %0.1是步长
p = pchip(x,y,new_x);
plot(x,y,'o',new_x,p,'r-')
3.2三次样条插值
%MATLAB内置函数
%三次样条插值spline
p = spline(x,y,new_x)
%x已知样本点的横坐标 y已知样本点的纵坐标 new_x要插入处对应的横坐标
%eg:
x = -pi:pi;%不写步长默认1为步长,所以,-pi:pi=-pi:1:pi
y = sin(x);
new_x = -pi:0.1:pi; %0.1是步长
p = spline(x,y,new_x);
plot(x,y,'o',new_x,p,'r-')
四、拓展:n维插值算法(了解)
4.1代码
p = interpn(x1,x2,...,xn,y,new_x1,new_x2,...,new_xn,'methond')
%x1,x2,...,xn是已知样本点的横坐标
%y是已知的样本点的纵坐标
%new_x1,new_x2,...,new_xn是要插入点的横坐标
%method是待选择的插值方法
%linear线性插值,默认选项
%cubic三次插值
%spline三次样条插值(最优选)
%nearest最邻近插值
五、用于预测(创新)
前面在“一、作用”处提到过插值算法是用来模拟产生一些可靠的新数据来满足需求的,其实也就是预测嘛。
事实上,三次样条插值算法比灰色预测在理论上更完美。
% 人口预测
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
year = 2009:2018;
p1 = pchip(year, population, 2019:2021) %分段三次埃尔米特插值预测
p2 = spline(year, population, 2019:2021) %三次样条插值预测
figure;
plot(year, population,'o',2019:2021,p1,'r*-',2019:2021,p2,'bx-')
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','Location','SouthEast')
标签:常用,分段,埃尔米,插值,算法,三次,new,pi From: https://www.cnblogs.com/coyy/p/18297490