数学建模(NO.3插值算法)
发布日期:2021-05-07 23:24:22 浏览次数:20 分类:精选文章

本文共 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】插值算法的概念

在这里插入图片描述

参考资料:刘春风:中国大学MOOC数值计算方法

【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)=x0x1xx1y0+x1x0xx0y1

  • 如果是三个点 ( 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函数的运用(可用于在同一个图形中同时显示多幅图像)

上一篇:数学建模(NO.4拟合)
下一篇:数学建模(NO.1层次分析法)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月14日 05时41分38秒