第三讲 插值算法

article/2025/9/30 7:59:56

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


主要概念:

  • 插值函数
  • 插值
  • 插值法

插值法:

设函数y=f(x)在区间[a,b]上有定义,

且已知在点aa\leqslant x_{0}<x_{1}<...<x_{n}\leqslant b上的值分别为:y_{0},y_{1},...,y_{n}

若存在一简单函数P(x),使P(x_{i})=y_{i} (i=0,1,2,...,n)

则称P(x)为f(x)的插值函数,点x_{0},x_{1},...,x_{n}称为插值节点,包含插值节点的区间[a,b]称为插值区间

插值函数P(x)的方法称为插值法。

三种方法(分段插值法最为常用):

若P(x)是次数不超过n的代数多项式,即:P(x)=a_{0}+a_{1}x+...+a_{n}x^n,称为插值多项式。

若P(x)为分段多项式,就称为分段插值。

若P(x)为三角多项式,就称为三角插值。(一般要用到傅里叶变换等复杂的数学工具)

插值法原理:

  

 注:

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

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


一维数据的插值(掌握)


多项式插值——1.拉格朗日插值法:

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

两个点:(x_{0},y_{0}),(x_{1},y_{1})

f(x)=\frac{x-x_{1}}{x_{0}-x_{1}}y_{0}+\frac{x-x_{0}}{x_{1}-x_{0}}y_{1}

三个点:(x_{0},y_{0}),(x_{1},y_{1}),(x_{2},y_{2})

 f(x)=\frac{(x-x_{1})(x-x_{2})}{(x_{0}-x_{1})(x_{0}-x_{2})}y_{0}+\frac{(x-x_{0})(x-x_{2})}{(x_{1}-x_{0})(x_{1}-x_{2})}y_{1}+\frac{(x-x_{0})(x-x_{1})}{(x_{2}-x_{0})(x_{2}-x_{1})}y_{2}

四个点:(x_{0},y_{0}),(x_{1},y_{1}),(x_{2},y_{2}),(x_{3},y_{3})

f(x)=\frac{(x-x_{1})(x-x_{2})(x-x_{3})}{(x_{0}-x_{1})(x_{0}-x_{2})(x_{0}-x_{3})}y_{0}+\frac{(x-x_{0})(x-x_{2})(x-x_{3})}{(x_{1}-x_{0})(x_{1}-x_{2})(x_{1}-x_{3})}y_{1}+\frac{(x-x_{0})(x-x_{1})(x-x_{3})}{(x_{2}-x_{0})(x_{2}-x_{1})(x_{2}-x_{3})}y_{2}+\frac{(x-x_{0})(x-x_{1})(x-x_{2})}{(x_{3}-x_{0})(x_{3}-x_{1})(x_{3}-x_{2})}y_{3}

 数学语言描述:

 

存在的问题:龙格现象(Runge phenomenon)

 

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

缺点:插值多项式次数高精度未必显著提高;插值多项式次数越高摄入误差可能显著越大。


2.分段线性插值(分段二(三)次插值法):

提高插值精度可用分段低次插值。 

3.牛顿插值法


 拉格朗日插值法和牛顿插值法的对比:

与拉格朗日插值法(计算过程较为麻烦)相比,牛顿插值法的计算过程具有继承性。(牛顿插值法每次插值只和前n项
的值有关,这样每次只要在原来的函数上添加新的项,就能够产生新的函数)

但是牛顿插值也存在龙格现象的问题。

上面讲的两种插值仅仅要求插值多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却 不能全面反映被插值函数的性态。
然而在许多实际问题中,不仅要求插值函数与被插值函数在所有节点处有相同的函数值,它也需要在一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值。
对于这些情况,拉格朗日插值和牛顿插值都不能满足。

注:实际建模过程中不能使用这两种插值法,一般使用分段插值法。


(重要)4.分段三次埃尔米特插值

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

Matlab有内置的函数:(实现过程已经帮我们封装好了,会调用就行了)

 解释:

1. x = ‐pi:pi        x的取值是从-pi开始,公差为1,到pi结束的7个数(-3.1416  -2.1416  -1.1416  -0.1416  0.8584  1.8584  2.8584 )

2.‐pi:0.1:pi         插值的点以精度0.1来插值

3.p = pchip(x,y,new_x)     x,y:初始点的横纵坐标;new_x:想要插值的点的横坐标;p:插值后对应的纵坐标

4.plot(x, y, 'o', new_x, p, 'r‐')        x,y用散点画;new_x, p用实线画

plot函数用法(画图函数):
plot(x1,y1,x2,y2) 
'r‐',线方式: - 实线   :点线   -. 虚点线   - - 波折线 
'o',点方式(散点图): . 圆点   +加号    * 星号    x x形   o 小圆
颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青

(重要)5.三次样条插值

Matlab有内置的函数:

说明:

画图后可用legend函数加注释;
legend(string1,string2,string3, …)函数:
分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
‘Location’函数用来指定标注显示的位置。

注意:

在做图前要加 figure(1) 函数

在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图。


n维数据的插值(了解)


p = interpn(x1,x2,...,xny, new_x1,new_x2,...,new_xnmethod)
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‐')

解释:
x1,x2,...,xn是已知的样本点的横坐标
y是已知的样本点的纵坐标坐标
new_x1,new_x2,...,new_xn是要插入点的横坐标
method是要插值的方法(四种):
‘linear’:线性插值(默认算法);
‘cubic’:三次插值;
‘ spline’ :三次样条插值法; ( 最为精准 )
‘nearest’:最邻近插值算法。


应用:插值算法可用于短期预测(人口预测)

根据过去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) %三次样条插值预测
plot(year, population,'o',2019:2021,p1,'r*‐',2019:2021,p2,'bx‐')
legend(‘样本点’,‘三次埃尔米特插值预测’,‘三次样条插值预测','Location','SouthEast')

 注意:实际建模过程中,大家尽量不要用插值算法来预测,上面只是举的一个小例子;
如果要预测,可以选择下一讲要学的拟合算法,也可以使用之后要学的专门用于预测的算法。

插值算法预测要比灰色预测更准确一些(小声)


感谢观看!


http://chatgpt.dhexx.cn/article/6OxxmqaA.shtml

相关文章

opencv中插值算法详解

导读 做图像处理的同学应该经常都会用到图像的缩放&#xff0c;我们都知道图片存储的时候其实就是一个矩阵&#xff0c;所以在对图像进行缩放操作的时候&#xff0c;也就是在对矩阵进行操作&#xff0c;如果想要将图片放大&#xff0c;这里我们就需要用到过采样算法来扩大矩阵…

几种插值算法对比

1.拉格朗日插值 2.牛顿插值 3.分段线性插值 4. 分段三次埃尔米特插值 5.样条插值函数 6.五种样条函数比较 所以&#xff0c; 7. 五种插值方法的实际应用

转载:一文讲解图像插值算法原理

最近在研究插值算法&#xff0c;看到这篇CSDN博主Datawhale学习介绍的博文&#xff0c;觉得介绍得挺不错&#xff0c;转载过来。原文地址&#xff1a;https://blog.csdn.net/Datawhale/article/details/105697264 寄语&#xff1a;本文梳理了最近邻插值法、双线性插值法和三次…

插值算法

插值&#xff0c;通俗来说当在一个离散的事件中&#xff0c;想知道某一个位置确定的值时&#xff0c;就可以利用插值方式计算得到&#xff0c;即利用已知数据估计未知位置数值。插值的方式有很多&#xff0c;下面介绍几种常用的插值方式。 一、最近邻插值(Nearest Neighbour …

几种插值算法对比研究

[研究内容] 目前比较常用的几种插值算法 [正文] 目前比较常用的插值算法有这么几种&#xff1a;最邻近插值&#xff0c;双线性二次插值&#xff0c;三次插值&#xff0c; Lanczos插值等等&#xff0c;今天我们来对比一下这几种插值效果的优劣。 1&#xff0c;最邻近插值 最…

【3.0】 常见的插值算法

插值算法的概念一维插值问题一般插值多项式的原理拉格朗日插值法牛顿插值法埃尔米特插值法分段 三次埃尔米特插值和分段三次样条插值&#xff08;常用&#xff0c;附代码&#xff09; 一、插值算法的概念 数学建模比赛中&#xff0c;常常需要根据已知的函数点进行数据、模型的…

常用的三种插值算法

在做数字图像处理时&#xff0c;经常会碰到小数象素坐标的取值问题&#xff0c;这时就需要依据邻近象素的值来对该坐标进行插值。比如做图像的几何校正&#xff0c;也会碰到同样的问题。 1、最近邻插值法&#xff08;Nearest Neighbour Interpolation&#xff09; 这是最简单的…

数学建模常见算法:插值算法

目录 一、插值的定义 二、拉格朗日多项式插值&#xff08;Lagrange插值&#xff09; 三、龙格现象&#xff08;Runge phenomenon&#xff09; 四、牛顿插值&#xff08;Newton&#xff09; 五、分段线性插值 六、埃尔米特插值(Hermite 插值) 七、三次样条插值 八、插值…

图像处理之-----插值算法

插值算法是图像处理中最基本的算法&#xff0c;首先我们先了解一下什么是插值算法&#xff0c;以及插值算法在图像处理过程中的应用。 1、什么是插值 Interpolation is a method of constructing new data points within the range of a discrete set of known data points. …

操作系统 读者写者问题的实现(C++ 读者优先、写者优先)

通过信号量机制和相应的系统调用&#xff0c;用于线程的互斥和同步&#xff0c;实现读者写者问题。利用信号量机制&#xff0c;实现读者写者问题。 在windows 10环境下&#xff0c;创建一个控制台进程&#xff0c;此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程…

信号量机制实现读者写者问题(思路剖析+Java代码实现+验证)

写在前面&#xff1a; Java中&#xff1a; 我们用这样的代码新建一个信号量&#xff1a;Semaphore mutex new Semaphore(1);P操作(wait)的代码为&#xff1a;mutex.acquire();V操作(signal)的代码为&#xff1a;mutex.release(); 本文章的内容&#xff1a; 读者写者问题&#…

Java实现读者写者问题--读者优先

作者&#xff1a;凌杰林 简介 临界资源&#xff1a;同一时间只能由一个进程访问的资源 临界区&#xff1a;访问临界资源的代码段 读者写者问题&#xff1a;存在一个多个进程共享的数据区&#xff08;临界资源&#xff09;&#xff0c;该数据区可以是一个文件或者一块内存空间…

操作系统实验:读者写者问题

一&#xff0e;实验目的&#xff1a; 通过实现读者写者问题理解进程及信号量的概念 二&#xff0e;实验要求&#xff1a; 创建一个控制台进程&#xff0c;此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分…

信号量机制——读者-写者问题

信号量机制——读者-写者问题 问题描述 一个共享数据区&#xff0c;有若干个进程负责对其进行读入工作&#xff0c;若干个进程负责对其进行写入工作。 允许多个进程同时读数据互斥读数据若有进程写数据&#xff0c;不允许读者读数据 对照生活中的购票系统&#xff1a; 一个…

操作系统:读者写者问题

操作系统&#xff1a;读者写者问题 问题&#xff1a;一、读者-写者问题: 读者优先二、读者-写者问题&#xff1a;写进程优先 三、读者写者问题的应用---独木桥问题类型1.一次只能过一辆车类型2.一次能过多辆车 四、总结附代码&#xff1a;//读者优先//写者优先//公平竞争 教材原…

四、操作系统——读者写者问题(详解)

一、问题描述&#xff1a; 二、需要满足的条件&#xff1a; 写进程与写进程之间必须互斥的写入数据&#xff08;因为如果两个写进程同时对共享数据中的区域A中的数据进行写操作的话&#xff0c;会导致数据错误覆盖的问题&#xff09;写进程与读进程之间必须互斥的访问共享数据…

锁机制:读者写者问题 Linux C

最近碰到一些锁机制的问题&#xff0c;想起大三的时候做过的一个小课设&#xff0c;记录复习一下。 问题描述&#xff1a; 一个数据文件可以被多个进程共享&#xff0c;其中&#xff0c;有些进程要求读&#xff08;reader进程&#xff09;&#xff0c;而另一些进程要求对数据…

写优先的读者写者问题(Java实现)

该题系吉林大学19级软件学院操作系统课设题之一 先输入初始时的写者读者情况&#xff0c;优先级顺序做了随机处理 代码如下 GUI&#xff1a; import javax.swing.*; import javax.swing.border.Border; import javax.swing.text.BadLocationException; import javax.swing.tex…

操作系统读者写者问题代码实现

问题分析&#xff1a; 读者优先: 读者进程执行: 无其他读者写者, 直接执行有写者等, 但其他读者在读, 直接读有写者写, 等待写者进程执行: 无其他读写者, 直接执行有其他读写者, 等待 写者优先: 读者进程执行: 如果此时没有写者等待, 直接执行如果有写者等待, 那么等待写者…

读者写者问题详解 操作系统

2.16 读者写者问题 抽象解释 多个进程访问一个共享的数据区读者&#xff08;读进程&#xff09;只能读数据&#xff0c;写者&#xff08;写进程&#xff09;只能写数据适用于数据库、文件、内存、寄存器等数据区的访问模型如12306购票系统&#xff0c;由于用户量庞大和数据量…