【数模】插值算法

插值算法的介绍

  • 插值的作用:当现有的数据是极少的,不足以支撑分析的进行时,用于**“模拟产生”**一些新的但又比较靠谱的值来满足需求。
  • 插值函数、插值、插值法的概念:
    在这里插入图片描述
  • 插值法的分类:
    • 插值多项式:P(x)为次数不超过n的代数多项式,即在这里插入图片描述
      • 数模中也常见(但不如分段插值常见)。
    • 分段插值:P(x)为分段多项式
      • 数模中最常见,大都是分段插值。
    • 三角插值:P(x)为三角多项式
      • 三角插值一般要用到傅里叶变换等复杂数学工具,不作介绍 。

插值多项式

一般插值多项式原理

在这里插入图片描述

  • 【注1】只要n+1个节点互异,满足上述插值条件的多项式是唯一存在的。⇒ 次数n若限定,差值多项式才是唯一。
  • 【注2】如果不限制多项式的次数,插值多项式并不唯一。

拉格朗日插值法

  • 一种多项式插值方法,作为了解即可,因为其存在问题较大(龙格现象),解题中并不使用。
    在这里插入图片描述

牛顿插值法

  • 仅作了解在这里插入图片描述
拉格朗日插值和牛顿插值的对比
  • 与拉格朗日插值法相比,牛顿插值法的计算过程具有继承性。
    • (牛顿插值法每次插值只和前n项的值有关,如此每次只要在原来的函数上添加新的项,就能够产生新的函数)
  • 两者共有的缺陷
    • ① 都未能解决龙格现象
    • ② 仅要求插值多项式在插值节点处与被插函数有相等的函数值 ⇒ 不能全面反映被插值函数的性态
      • 实际问题中,不仅要求插值函数与被插值函数在所有节点处有相同的函数值,也需要在一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值
      • 相同导数值的意义:保持插值曲线在节点处有切线(光滑),使插值函数和被插函数的密和程度更好。

埃尔米特(Hermite)插值

  • 满足以下俩点要求的插值多项式就是埃尔米特插值多项式
    • ①在节点上的函数值相等;
    • ②要求对应的导数值也相等,甚至要求高阶导数也相等
  • 直接使用Hermite插值得到的多项式次数较高,也存在着龙格现象 ⇒ 因此在实际应用中,往往使用分段三次 Hermite 插值多项式 (PCHIP)。

高次多项式插值的缺陷:龙格现象

  • 高次插值会产生龙格现象,即在两端处波动极大,产生明显的震荡。
  • 总结插值多项式问题:
    • ① 插值多项式次数高精度未必显著提高
    • ②插值多项式次数越高摄入误差可能显著增大
    • 故:在不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。⇒ 选用分段插值 在这里插入图片描述

分段线性插值

  • 分段低次插值:选相邻两个点,用线段相连而成。

    • 错误率较高 ⇒ 故会进而采用分段二次插值
      在这里插入图片描述
  • 分段二次插值(分段抛物插值)

    • 二次插值在几何上就是用分段抛物线代替直线y=f(x),故分段二次插值又称为分段抛物插值。
      在这里插入图片描述

建模中两种常用的插值

  • 以下两种均可使用,取决个人喜好。
  • 介绍说辞:分段三次埃尔米特插值/三次样条插值 可很好地保持数据光滑性和连续性,减少信息量的损失。

分段三次埃尔米特插值(PCHIP)

  • Matlab有内置的函数:p = pchip(x,y, new_x)
    • x是已知的样本点的横坐标;
    • y是已知的样本点的纵坐标;
    • new_x是要插入处对应的横坐标
  • 举例:
    • 线方式: ‘‐’ 实线; ':'点线; ‘‐.’ 虚点线; ‘‐ ‐’ 波折线
    • 点方式: ‘.’ 圆点; '+'加号; ‘*’ 星号; ‘x’ x形; ‘o’ 小圆
    • 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青
x = ‐pi:pi; y = sin(x);
new_x = ‐pi:0.1:pi;
p = pchip(x,y,new_x);
plot(x, y, 'o', new_x, p, 'r‐')
% plot函数用法:
plot(x1,y1,x2,y2)

三次样条插值

  • 定义:在这里插入图片描述
  • 构造方法:在这里插入图片描述
  • 三次样条插值的使用
    • Matlab内置函数:p = spline (x,y, new_x)
      • x是已知的样本点的横坐标;
      • y是已知的样本点的纵坐标;
      • new_x是要插入处对应的横坐标
    • 举例:
      • 说明:legend(string1,string2,string3, …)分别将字符串1、字符串2、字符串3…标注到图中,每个字符串对应的图标为画图时的图标。
      • ‘Location’用来指定标注显示的位置
      • 下列函数的效果图:在这里插入图片描述
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(1);%用于命名每个图,防止画下一个图的时候把该图覆盖
plot(x,y,'o',new_x,p1,'r‐',new_x,p2,'b‐')
legend('样本点','三次埃尔米特插值','三次样条插值',‘Location’,‘SouthEast’) %标注显示在东南方向

处理n维数据的插值(仅了解)

  • 了解即可,n维数据的插值题很少见
  • 函数:p = interpn(x1,x2,...,xn, y, new_x1,new_x2,...,new_xn, method)
    • x1,x2,…,xn是已知的样本点的横坐标
    • y是已知的样本点的纵坐标坐标
    • new_x1,new_x2,…,new_xn是要插入点的横坐标
    • method是要插值的方法,有:
      • ‘linear’:线性插值(默认算法);
      • ‘cubic’:三次插值;
      • ‘spline’:三次样条插值法;(最为精准)
      • ‘nearest’:最邻近插值算法。
x = ‐pi:pi; y = sin(x);
new_x = ‐pi:0.1:pi;
p = spline(x, y, new_x); %等价于 p = interpn (x, y, new_x, ’spline’);
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) %三次样条插值预测
plot(year, population,'o',2019:2021,p1,'r*‐',2019:2021,p2,'bx‐')
legend(‘样本点’,‘三次埃尔米特插值预测’,‘三次样条插值预测','Location','SouthEast')

具体样例:一维插值问题

在这里插入图片描述


课后习题

  • 题目:写一篇小论文,完成下图这些数据的插值,并将结果保存到一个EXCEL表格中。

    • 在这里插入图片描述
  • 要求:

    • 至少选取两种插值方法
    • 对1号池中的这些指标做出插值后图像(显示在同一个图像中)。
  • 提示:

    • (1)数据多,每次选取一行插值太慢:可使用循环的方式来进行插值。
    • (2)插值后得到的值可以先保存到一个矩阵中,然后再复制到Excel中。
    • (3)在同一个图形中同时显示多幅图像:百度matlab中subplot函数的运用

附言

  • 参考课程可见 B站清风数模,如上仅作个人学习后笔记整理。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值