【3.0】 常见的插值算法

article/2025/9/30 7:56:56
  • 插值算法的概念
  • 一维插值问题
  • 一般插值多项式的原理
  • 拉格朗日插值法
  • 牛顿插值法
  • 埃尔米特插值法
  • 分段 三次埃尔米特插值和分段三次样条插值(常用,附代码)
一、插值算法的概念

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

二、一维插值问题

已知有 n + 1 n+1 n+1个节点 ( x i , y i ) ( i = 0 , 1 , … , n ) \text{(}x_i,y_i\text{)}\left( i=0,1,…\text{,}n \right) xi,yi(i=0,1,n)其中 x i x_i xi互不相同,不妨假设 a = x 0 < x 1 < … < x n = b a=x_0<x_1<…<x_n=b a=x0<x1<<xn=b,求任一插值点 x ∗ ( ≠ x i ) x^*(\ne x_i) x(=xi)处的插值 y i y_i yi
在这里插入图片描述
思路:构造函数 y = f ( x ) y=f\left( x \right) y=f(x),使得 f ( x ) f\left( x \right) f(x)过所有结点,求 f ( x ∗ ) f\left( x^* \right) f(x)即可得到 y ∗ y^* y

三、一般多项式的插值原理

定理:设有 n + 1 n+1 n+1个互不相同的结点 ( x i , y j ) ( i = 0 , 1 , 2 , … , n ) \left( x_i,y_j \right) \left( i=0,1,2,…\text{,}n \right) (xi,yj)(i=0,1,2,n),则存在唯一的多项式:

在这里插入图片描述
使得:
L n ( x j ) = y j ( j = 0 , 1 , 2 , … , n ) L_n\left( x_j \right) =y_{j\,\,}\,\, \left( j=0,1,2,…\text{,}n \right) Ln(xj)=yj(j=0,1,2,n)
注意:

  • 只要 n + 1 n+1 n+1个结点互异,满足上述插值条件的多项式是唯一存在的。
  • 如果不限制多项式的系数,插值多项式并不唯一。
四、拉格朗日插值法

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

  • 两个点: ( x 0 , y 0 ) , ( x 1 , y 1 ) \left( x_0,y_0 \right) ,\left( x_1,y_1 \right) (x0,y0),(x1,y1)
    在这里插入图片描述

  • 三个点: ( 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)
    在这里插入图片描述

  • 四个点: ( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) \left( x_0,y_0 \right) ,\left( x_1,y_1 \right) ,\left( x_2,y_2 \right) ,\left( x_3,y_3 \right) (x0,y0),(x1,y1),(x2,y2),(x3,y3)
    在这里插入图片描述

拉格朗日插值多项式中特别的函数:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
由上述公式可得拉格朗日插值多项式为:
在这里插入图片描述
拉格朗日插值的缺点:高次插值会产生龙格现象,即在两端处波动极大,产生明显的震荡。在不熟悉曲线的运动趋势的前提下,不要轻易使用高次插值。
在这里插入图片描述

五、牛顿插值法

差商的定义:称 f [ x 0 , x k ] = f ( x k ) − f ( x 0 ) x k − x 0 f\left[ x_0,x_k \right] =\frac{f\left( x_k \right) -f\left( x_0 \right)}{x_k-x_0} f[x0,xk]=xkx0f(xk)f(x0)为函数 f ( x ) f\left( x \right) f(x)关于点 x 0 , x 1 x_0,x_1 x0,x1的一阶差商,也可以成为均差。

二阶差商: f [ x 0 , x 1 , x 2 ] = f [ x 1 , x 2 ] − f [ x 0 , x 1 ] x 2 − x 0 f\left[ x_0,x_1,x_2 \right] =\frac{f\left[ x_1,x_2 \right] -f\left[ x_0,x_1 \right]}{x_2-x_0} f[x0,x1,x2]=x2x0f[x1,x2]f[x0,x1]

具体牛顿插值的多项式如下:

在这里插入图片描述
牛顿插值与拉格朗日插值比较

  • 与拉格朗日插值法相比,牛顿插值法的计算过程具有继承性(牛顿插值法每次插值只和前n项的值有关,这样每次只要在原来函数上添加新的项,就能够产生新的插值函数),但牛顿插值也存在龙格现象。
  • 这两种插值方法仅仅要求插值多项式在插值结点处与被插函数有相同的函数值,而这种插值多项式却不能全面反映被插函数的特性。在许多的实际问题中,不仅要求插值函数与被插函数在所有结点处有相同的函数值,它也需要在一个或者全部结点上插值多项式与被插函数具有相同的低阶甚至是高阶的倒数值。对于这样的要求,这两种插值方法都不能满足。
六、埃尔米特插值

这种插值方法不但要求节点上的函数值相等,而且要求对应的导数值也相等,甚至要求高阶导数也相等,满足这种要求的插值多项式就是埃尔米特插值多项式。

具体原理:

设函数 f ( x ) f\left( x \right) f(x)在区间[a,b]上有n+1个互异节点 a = x 0 < x 1 < … < x n = b a=x_0<x_1<…<x_n=b a=x0<x1<<xn=b,定义在[a,b]上函数 f ( x ) f\left( x \right) f(x)在节点上满足:

在这里插入图片描述
可唯一确定一个次数不超过2n+1的多项式 H 2 n + 1 ( x ) = H ( x ) H_{2n+1}\left( x \right) =H\left( x \right) H2n+1(x)=H(x)满足:
在这里插入图片描述
其余项为:
在这里插入图片描述

七、分段三次埃尔米特插值和分段三次样条插值

分段三次埃尔米特插值:直接使用埃尔米特插值得到的多项式次数较高,也存在龙格现象,因此在实际应用中,往往使用分段三次埃尔米特插值多项式(PCHIP)

MATLAB有内置函数 p = pchip(x,y,new_x)

x是已知的样本点的横坐标,y是已知样本点的纵坐标,new_x是要插入处对应的横坐标

一个实例,代码如下:

% 分段三次埃尔米特插值
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-')% plot函数用法:
% plot(x1,y1,x2,y2) 
% 线方式: - 实线 :点线 -. 虚点线 - - 波折线 
% 点方式: . 圆点  +加号  * 星号  x x形  o 小圆
% 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青

代码运行结果如下:
在这里插入图片描述
分段三次样条插值:设 y = f ( x ) y=f\left( x \right) y=f(x)在点 x 0 , x 1 , x 2 , … , x n x_0,x_1,x_2,…,x_n x0,x1,x2,xn的值为 y 0 , y 1 , y 2 , … , y n y_0,y_1,y_2,…,y_n y0,y1,y2,yn,若函数 S ( x ) S\left( x \right) S(x)满足下列条件

  • S ( x i ) = f ( x i ) = y i , i = 0 , 1 , 2 , … , n S\left( x_i \right) =f\left( x_i \right) =y_i,i=0,1,2,…,n S(xi)=f(xi)=yi,i=0,1,2,,n
  • 在每一个子区间 [ x i , x i + 1 ] ( i = 0 , 1 , 2 , … , n − 1 ) \left[ x_i,x_{i+1} \right] \left( i=0,1,2,…,n-1 \right) [xi,xi+1](i=0,1,2,,n1) S ( x ) S\left( x \right) S(x)是三次多项式
  • S ( x ) S\left( x \right) S(x)在[a,b]上二阶连续可微

则称 S ( x ) S\left( x \right) S(x)为函数 f ( x ) f\left( x \right) f(x)的三次样条插值函数。

三次样条插值函数实例:

MATLAB有内置函数:p = spline(x,y,new_x)

x是已知的样本点的横坐标,y是已知样本点的纵坐标,new_x是要插入处对应的横坐标。

代码示例如下:

% 三次样条插值和分段三次埃尔米特插值的对比
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’用来指定标注显示的位置

在这里插入图片描述
分析生成结果:可以看出,三次样条生成的曲线更加光滑。在实际建模中,由于我们不知道数据的生成过程,因此两种插值都可以使用。

注意点

  • 上面学习的这些插值算法可用于短期预测。
  • 在实际建模过程中,尽量不要使用插值算法来预测,如果要进行预测,可以选择下面更新的拟合算法或者一些专门用来预测的算法,这些都可以在接下来的更新中学习到。

更多有关于插值法的经典获奖论文,关注公众号,回复,“插值算法”,即可免费领取!!!
在这里插入图片描述


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

相关文章

常用的三种插值算法

在做数字图像处理时&#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;由于用户量庞大和数据量…

同步机制—读者写者问题

【实验目的】 理解临界区和进程互斥的概念&#xff0c;掌握用信号量和PV操作实现进程互斥的方法。 【实验内容】 在windows或者linux环境下编写一个控制台应用程序&#xff0c;该程序运行时能创建N个线程&#xff0c;其中既有读者线程又有写者线程&#xff0c;它们按照事先设计…

操作系统——读者写者问题

一、问题描述 要求: 1、允许多个读者可以同时对文件执行读操作。 2、只允许一个写者往文件中写信息。 3、任一写者在完成写操作之前不允许其他读者或写者工作。 4、写者执行写操作前,应让已有的读者和写者全部退出。 二、问题分析 读者写者问题最核心的问题是如何处理…

【操作系统-进程】PV操作——读者写者问题

文章目录 读者写者问题万能模板万能模板 1——读进程优先万能模板 2——读写公平法万能模板 3——写进程优先 题目 1&#xff1a;南北过桥问题题目 2&#xff1a;录像厅问题题目 3&#xff1a;更衣问题 读者写者问题万能模板 读者写者问题&#xff0c;其本质就是连续多个同类进…

经典进程同步问题(三)——读者写者问题

目录 一、问题描述 二、解题思路 2.1 读者优先算法 2.2 写者优先算法 2.3 读写公平 三、源码实现 3.1 读者优先 3.2 写者优先 3.3 读写平等 一、问题描述 一个数据问价或记录可以被多个进程共享&#xff0c;我们把只读该文件的进程称为“读者进程”&#xff0c;其他进…

2. 堆与栈的区别

2. 堆与栈的区别 在理解这两个概念时&#xff0c;需要放到具体的场景下&#xff0c;因为不同场景下&#xff0c;堆与栈代表不同的含义。一般情况下&#xff0c;有两层含义&#xff1a; &#xff08;1&#xff09;程序内存布局场景下&#xff0c;堆与栈表示的是两种内存管理方式…

栈与堆的区别(内存分配与数据结构)

参考自https://blog.csdn.net/K346K346/article/details/80849966/ 堆&#xff08;Heap&#xff09;与栈&#xff08;Stack&#xff09;包含两层含义&#xff1a; 程序内存布局场景下的内存管理方式数据结构中的两种常见的数据结构 1. 程序内存分配中的堆与栈 1.1 栈介绍 …