插值算法(数学建模学习)

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

本系列参考清风老师的数学建模课程

插值算法

一、算法介绍

(一)算法引入

对于数据量少到不足以去分析问题,而必须生成一些合理的数据的情况要用到插值算法。

(二)算法详解

(1)定义
设函数 y = f ( x ) y=f(x) y=f(x)在区间 [ a , b ] [a,b] [a,b]上有定义,且已知在点 a ≤ x 0 < x 1 < . . . < x n ≤ b a≤x_0<x_1<...<x_n≤b ax0<x1<...<xnb上的值分别为: y 0 , y 1 . . . y n y_0,y_1...y_n y0,y1...yn,若存在一简单函数 P ( x ) P(x) P(x),使得
P ( x i ) = y i , i ∈ N P(x_i)=y_i,i∈N P(xi)=yi,iN
则称 P ( x ) P(x) P(x) f ( x ) f(x) f(x)的插值函数。
x 0 , x 1 . . . x n x_0,x_1...x_n x0,x1...xn为插值节点。
[ a , b ] [a,b] [a,b]为插值区间。
称求插值函数 P ( x ) P(x) P(x)的方法为插值法。

总结信息:找到一个能完美通过所有数据点的函数(特别强调:简单是指次数尽可能低)。

(2)两种实用插值算法

  • 分段三次Hermite插值

条件:

  1. 在节点上的函数值相等。
  2. 对应的导数值相等。
  3. 高阶导数值也相等。

说明:对于普通的Hermite算法插值所生成的多项式次数高,容易产生龙格现象(Runge phenomenon)。因此需要分成三次使用Hermite算法,生成三段函数,叫做分段三次Hermite插值多项式(PCHIP)。原理复杂无需了解。

  • 三次样条插值

条件:

  1. 在节点上的函数值相等。
  2. 在每个子区间上函数是三次多项式。
  3. 函数在区间上二阶连续可微。

说明:在某些情况下三次样条插值比三次分段Hermite插值算法所生成的插值函数更加光滑,但有时不一定,因此尽量两种方法都试一试。

(三)算法举例

利用插值算法预测短期(4年之内)人口数量变化情况。
(1)数据

将准备好的数据导入设定的两个向量year,population中.

(2)执行算法

  • 分段三次Hermite插值
%设x是已知样本点横坐标,y是已知样本点纵坐标,new_x是要插入处对应的横坐标。
p=pchip(x,y,new_x)
%因此本题生成函数应写成
p1=pchip(year,population,2019:2022);
  • 三次样条插值
%同上段程序题设
p=spline(x,y,new_x)
p2=spline(year,population,2019:2022);

(3)预测绘图

%通过绘图比较两种插值算法对应效果
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-');
legend('样本点','分段三次Hermite插值','三次样条插值','Location','SouthEast');


红色为三次分段Hermite插值生成函数,蓝色为三次样条插值算法生成函数。

说明:只是拿短期人口预测做插值举例,真正建模中要做人口预测用拟合算法或者之后专门预测模型更好!

二、算法实现

  • 分段三次Hermite插值算法
p=pchip(x,y,new_x);
plot(x,y,'o',new_x,p,'r-');
  • 三次样条插值算法
p=spline(x,y,new_x);
plot(x,y,'o',new_x,p,'r-');

三、算法应用

(一)题目描述

某水池中在奇数周的水池各项指标如下表所示,其中一行代表一项指标,请补充偶数周该水池各项指标值。

(二)算法实战

(1)插值算法生成数据

%考虑三次分段Hermite插值函数pchip(x,y,new_x)%x为已知数据点对应的自变量值。
%y为已知数据点的因变量值。
%new_x为待插值数据点所对应的自变量值。
%假设将该水池所对应的数据已导入Z.mat中。
load Z.mat
x=Z(1,:);
[n,m]=size(Z);
P=zeros(11,15);
for i=2:ny=Z(i,:);new_x=1:15;p1=pchip(x,y,new_x);subplot(4,3,i-1);P(i-1,:)=p1;     
end
P = [1:15; P] 
  1. 导入已知数据点的自变量x。
  2. 导入已知数据点的因变量y。
  3. 导入待插入数据点的自变量new_x。

(2)绘制图形

引自别人绘图代码

(三)总结思考

1、算法对比与评价:可以使用三种插值算法分别进行插值。lagrange插值、三次分段Hermite插值与三次样条插值。
(1)lagrange插值算法:总体来看,插值数据能近似反映缺失值的真实情况,但是该算法不具有继承性,且所生成的函数存在Runge现象,个别插值数据明显脱离实际,XXX数据值为负数,这显然不合实际,说明拉格朗日插值法存在局限性。
(2)三次分段Hermite插值算法:插值数据具有更高的精度,但在插值节点处是不光滑不准确的。
(3)三次样条插值算法:当插值节点的密度逐渐变大时,三次样条插值函数不但收敛于函数本身及其微商,也收敛于函数的微商,因此这一特性使得该算法具有更高的插值精度。

2、算法功能:该插值算法在整个数学建模竞赛中只能起到数据预处理的作用,根本不在建模过程中,因此论文写作若用到该算法要另开标题。


http://chatgpt.dhexx.cn/article/fyIRfmbH.shtml

相关文章

MATLAB-插值算法汇总

前言 数模比赛中常常需要对数据进行分析&#xff0c;当数据不足时就需要补充数据&#xff0c;所用到的方法就是插值法。本文汇总了一些常用的插值算法。 Hermite插值 埃尔米特插值(Hermite)会在给定的节点处&#xff0c;要求插值多项式的函数值与原函数值相同&#xff0c;同时…

第三讲 插值算法

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

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…