
本文共 3068 字,大约阅读时间需要 10 分钟。
插值算法
一.应用
数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。
二.算法
【1】一维插值问题
问题如下:已经有n + 1个节点 ( x (x (xi , y ,y ,yi ) ( i = 0 , 1 , , n ) )(i=0,1, ,n) )(i=0,1,,n),其中xi互不相同,不妨假设a= x x x0 < x <x <x1 < x <x <x2 < . . . < x <...<x <...<xn求任一插值点 x ∗ x* x∗ ( ≠ x i ) (\neq x_{i}) (=xi)处的插值y*.

思路:构造函数 y = f ( x ) y=f(x) y=f(x),是的 f ( x ) f(x) f(x)过所有节点,求 f ( x ∗ ) f\left( x^{\ast }\right) f(x∗)即可得到 y ∗ y^{\ast } y∗
【2】插值算法的概念
【3】插值算法的分类
1.多项式插值
p ( x ) = a 0 + a 1 x + . . . . . + a n x n \begin{aligned}p\left( x\right) =a_{0}+a_{1}x+.....+a_{n}x^{n}\end{aligned} p(x)=a0+a1x+.....+anxn
[1]原理

[2]拉格朗日插值法
- 如果是两个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) \left( x_{0},y_{0}\right) ,\left( x_{1},y_{1}\right) (x0,y0),(x1,y1)
f ( x ) = x − x 1 x 0 − x 1 y 0 + x − x 0 x 1 − x 0 y 1 \begin{aligned}f\left( x\right) =\dfrac{x-x_{1}}{x_{0}-x_{1}}y_{0}+\dfrac{x-x_{0}}{x_{1}-x_{0}}y_{1}\end{aligned} f(x)=x0−x1x−x1y0+x1−x0x−x0y1
- 如果是三个点 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) \left( x_{0},y_{0}\right) ,\left( x_{1},y_{1}\right),\left( x_{2},y_{2}\right) (x0,y0),(x1,y1),(x2,y2)
- 如果是n个点
[3] 牛顿插值
[4]两种插值对比
[5] 存在的问题:龙格现象
[6]存在的问题:不全面反应形态
上面讲的两种插值仅仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却不能全面反映被插值函数的性态。然而在许多实际问题中,不仅要求插值函数与被插值函数在所有节点处有相同的函数值,它也需要在一个或全部节点上插值多项式与被插
函数有相同的低阶甚至高阶的导数值。对于这些情况,拉格朗日插值和牛顿插值都不能满足。2. 分段二次插值
[1]概念
[2]埃尔米特插值
(1)概念
(2)原理
3.分段三次埃尔米特插值
[1]绘图代码
plot函数用法:
plot(x1,y1,x2,y2) 线方式: ‐ 实线 :点线 ‐. 虚点线 ‐ ‐ 波折线 点方式: . 圆点 +加号 * 星号 x x形 o 小圆 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青[2] 代码
% 分段三次埃尔米特插值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-')
[3]与三次样条插法对比
% 三次样条插值和分段三次埃尔米特插值的对比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, …)% 分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。% ‘Location’用来指定标注显示的位置
4.拓展:n维数据的插值
**% n维数据的插值x = -pi:pi; y = sin(x); new_x = -pi:0.1:pi;p = interpn (x, y, new_x, 'spline');% 等价于 p = spline(x, y, new_x);figure(3);plot(x, y, 'o', new_x, p, 'r-')
% 人口预测(注意:一般我们很少使用插值算法来预测数据,随着课程的深入,后面的章节会有更适合预测的算法供大家选择,例如灰色预测、拟合预测等)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')**
三.课后作业
写一篇小论文,完成下边这些数据的插值,并将结果保存到一个EXCEL表格中。要求至少选取两种插值方法,并对1号池中的这些指标做出插值后图像(显示在同一个图像中)。
提示: (1)数据这么多,每次选取一行插值太慢,可使用循环的方式来进行插值。 (2)插值后得到的值可以先保存到一个矩阵中,然后再复制到Excel中。 (3)自己百度matlab中subplot函数的运用(可用于在同一个图形中同时显示多幅图像)
发表评论
最新留言
关于作者
