快捷搜索:  汽车  科技

线性插值法计算公式(插值算法)

线性插值法计算公式(插值算法)使得则存在唯一的多项式:若存在一个简单的函数P(x),使则称P(x)为f(x)的插值函数,点称为插值节点,包含插值节点的区间[a b]称为插值区间,求插值函数P(x)的方法称为插值法。定理:设有n 1个互不相同的节点

数模比赛中,常常需要根据一直的函数点来进行数据、模型的处理和分析,而有的时候现有的数据是极少的,不足以支撑分析的进行,这事就需要使用一i写数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,值就是插值的作用。

1、一维插值问题:

问题如下:已经有n 1个节点,其中互不相同,不妨假设,求任意插值点处的插值

线性插值法计算公式(插值算法)(1)

思路:构造出一个函数y=f(x),使得f(x)结果所有的点,求即可得到

2、插值法的概念:

设函数y= f(x)在区间[a b]上有定义,且已知在点 上的值分别为

若存在一个简单的函数P(x),使

则称P(x)为f(x)的插值函数,点称为插值节点,包含插值节点的区间[a b]称为插值区间,求插值函数P(x)的方法称为插值法。

  • 若P(x)是次数不超过n的代数多项式,即,就称为插值多项式
  • 若P(x)为分段多项式,就称为分段插值
  • 若P(x)为三角多项式,就称为三角插值。
3、一般插值多项式原理

定理:设有n 1个互不相同的节点

则存在唯一的多项式:

使得

证明:构造方程组

令:

方程组的矩阵形式如下:AX=Y(4)

由于所以方程组(4)存在唯一解

从而唯一存在

注1:只要n 1个节点互异,满足上述插值条件的多项式是唯一的

注2:如果不限制多项式的次数,插值多项式并不唯一

4、拉格朗日插值法

在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·刘易斯·拉格朗日命名的一种多项式插值方法。在若干个不容的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。

两个点

我们可以构造出在两点之间的任意的一点对应的插值

三个点

对于四个点甚至更多的点,我们可以依次写出

数学表达:

线性插值法计算公式(插值算法)(2)

龙格现象

高次插值会产生龙格现象,即在两端处的波动极大,产生明显的震荡。在不清楚运动趋势的前提下,不要轻易使用高次插值。

5、分段线性插值

由于插值多项式的次数越高未必能提高精度,反而可能回增大误差,所以引入分段插值。

最简单的就是分段线性插值,相邻的两点之间连成一条线段来拟合所有的点。

线性插值法计算公式(插值算法)(3)

分段线性插值

6、分段二次插值(分段抛物插值)

选取跟节点x最近的三个节点进行二次插值,即在每一个区间上,取

这种分段的低次插值称为分段二次插值,在几何上就是用分段抛物线代替y=f(x),所以分段二次插值又称为分段抛物插值。

7、埃尔米特(Hermite)插值

不做过多叙述,就是它即满足函数值相等,又满足导数值相等,甚至是高阶导数值还相等的不超过(2n 1)次的多项式。既然是多项式肯定存在龙格现象,因此我们使用分段的方法来降低误差,减少龙格。

8、分段三次埃尔米特插值(常用)

直接使用Hermite插值得到的多项式次数较高,也存在龙格现象。因此在实际使用中,往往使用分段三次Hermite插值多项式(PCHIP)。

证明推导太过复杂,掌握怎么使用即可。

matlab有内置函数pchip()

x = -pi:pi; y = sin(x); new_x = -pi:0.1:pi; p = pchip(x y new_x); figure(1); plot(x y 'o' new_x p 'r-') % 此处的'o'用来修饰plot(x y) % plot函数用法: % plot(x1 y1 x2 y2) % 线方式: - 实线 :点线 -. 虚点线 -- 波折线 % 点方式: . 圆点 加号 * 星号 x x形 o 小圆 % 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青

线性插值法计算公式(插值算法)(4)

分段三次Hermite插值

9、三次样条插值(常用)

三次样条插值需要满足更严苛的条件:

  • 函数值相等S(x) =f(x)
  • 在每个子区间上S(x)都是三次多项式
  • S(x)在[a b]上二阶可微

主要来说应用

matlab有内置的函数spline(x y new_x)

% 三次样条插值和分段三次埃尔米特插值的对比 x = -pi:pi; y = sin(x); new_x = -pi:0.1:pi; p1 = pchip(x y new_x); %分段三次埃尔米特插值 p2 = spline(x y new_x); %三次样条插值 figure(2); plot(x y 'o' new_x p1 'r-' new_x p2 'b-') legend('样本点' '三次埃尔米特插值' '三次样条插值' 'Location' 'SouthEast') % legend(string1 string2 String3 ...)每个String与绘图之间有顺序对应关系 % Location 表示legend的位置,上述语句表示在SouthEast东南方向

线性插值法计算公式(插值算法)(5)

Hermite插只与三次样条插值对比

可以看出,三次样条生成的曲线更加光滑。在实际过程中,由于我们不知道数据的生成过程,因此两种插值都可以使用。

10、预测

这里我们发现可以使用插值算法来进行数据预测,但是一般我们很少使用插值算法来预测数据,随着深入学习,后面的章节会有更适合预测的算法。

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(4); plot(year population 'o' 2019:2021 p1 'r*-' 2019:2021 p2 'bx-') legend('样本点' '三次埃尔米特插值预测' '三次样条插值预测' 'Location' 'SouthEast')

代码解读,给出2009年到2018年的人口数量,预测未来三年2019-2021年的人口数量,,因此年份就是x轴,人口就是y,new_x为2019-2021,进行插值然后绘图显示。

猜您喜欢: