首页 > 编程语言 >插值算法 (含代码)

插值算法 (含代码)

时间:2025-01-17 11:58:58浏览次数:3  
标签:分段 插值 多项式 代码 插值法 算法 new pi

插值法的原理

1,线性差值法

2,拉格朗日插值点

3,分段插值

(1)分段线性插值

(2)分段二次插值

4,牛顿插值法

5,Hermite插值法

6,(重要)分段Hermite插值

7,(重要)三次样条插值

8,n维数据的插值


插值算法:用于在已知数据点的基础上,估算出这些数据点之间其他位置的数值。

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

插值法的原理

设有 n+1个互不相同的节点(xi,yi),则存在唯一的多项式:

证明略了

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

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

1,线性差值法

基于两点确定一条直线的原理。假设已知两点(x0,y0),(x1,y1),通过构建直线方程来求解,直线的斜率,根据点斜式可得线性插值公式为

2,拉格朗日插值点

通过构造n次多项式来逼近给定的n+1个数据点

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

3,分段插值

(1)分段线性插值

直接取最近的两个点之间的线段上相同横坐标的点

(2)分段二次插值

因为n个点可以求出唯一一个n-1次的函数,所以如果要插入节点x,可以取最近的3个x1,x2,x3来求出唯一的一个二次函数,取这二次函数的值

4,牛顿插值法

也是构造一个n次多项式来拟合n+1个数据点。与拉格朗日插值不同,牛顿插值通过差商的概念构建插值多项式。

首先定义一阶差商:

根据一阶差商可以求出二阶差商:

最后的表达式如下

虽然加入新的点时的计算量小,但是仍然有龙格现象

5,Hermite插值法

要求函数值对应同时,还要求导数值对应.这样可以找到一个2*n+1的多项式

6,(重要)分段Hermite插值

可以直接使用matlab中的pchip函数来直接调用,比赛直接用就是了

加入我们有7个在-pi到pi的等分点,然后我们要在里面插入以0.1为精度的,覆盖-pi到pi的值,我们看看最后的结果吧

x = -pi:pi; y = sin(x);  //y是要拟合上的函数

new_x = -pi:0.1:pi;//要插入的点

p = pchip(x,y,new_x);//根据x和y插入 new_x这些点

figure(1); % 在同一个脚本文件里面,要想画多个图,需要给每个图编号,否则只会显示最后一个图哦~

plot(x, y, 'o', new_x, p, 'r-')//这里表示x,y用点表示,new_x和p用实线连接

这里的plot(x1,y1,x2,y2)的用法

线方式:  -实线 : 点线  -. 虚点线 - -波折线

点方式:  .圆点 + 加号  * 星号   x x形 o小圆

颜色:    y黄;  r 红;    g 绿;    b蓝;  w白;  k黑;

7,(重要)三次样条插值

在matlab里的是spine函数,

我们去matlab中将他们对比下

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') %标注显示在东南方向

既可以两个求平均,也可以两个选一个

8,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-')

如果是一维的,其实就和上面的一些等价

标签:分段,插值,多项式,代码,插值法,算法,new,pi
From: https://blog.csdn.net/2401_84910613/article/details/145204481

相关文章

  • 【人工智能学习之聚类分析算法DBSCAN】
    【人工智能学习之聚类分析算法DBSCAN】什么是DBSCAN详细介绍对比DBSCAN和K-Means聚类算法的优缺点DBSCAN的实际应用DBSCAN调用方法具体代码示例:人群密度测算修改参数什么是DBSCANDBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise),即基于密度的......
  • 算法面试准备 - 手撕系列第五期 - 单头注意力机制(包括Self_atten和Cross_atten)
    算法面试准备-手撕系列第五期-单头注意力机制(包括Self_atten和Cross_atten)目录算法面试准备-手撕系列第五期-单头注意力机制(包括Self_atten和Cross_atten)单头注意力机制原理原理图像背景介绍原理解析1.输入与嵌入2.线性变换3.注意力分数计算4.软max归一......
  • 算法面试准备 - 手撕系列第六期 - 多头注意力机制(包括Self_atten和Cross_atten)
    算法面试准备-手撕系列第六期-多头注意力机制(包括Self_atten和Cross_atten)目录算法面试准备-手撕系列第六期-多头注意力机制(包括Self_atten和Cross_atten)多头注意力机制原理多头注意力机制原理图像背景介绍原理解析1.输入与嵌入2.多头注意力的计算流程(1)......
  • 条件卷积condconv模型详解及代码复现
    基本原理条件卷积(CondConv)是一种创新的卷积方法,它通过动态计算卷积核来克服传统静态卷积的局限性。这种方法的核心思想是将卷积核参数化为多个专家(卷积核)的线性组合,具体公式如下:Output(x)=σ((α1⋅W1+...+αn⋅Wn)∗x)在这个公式中:x:表示输入特征图αi:是通过可学......
  • Code Review:提升代码质量与团队能力的利器
    作者:京东物流韩旭1.引言CodeReview(下文简称CR),即代码审查,是一种通过评审代码以发现并修正错误的实践。它不是一个新概念,但在软件开发中,它的重要性毋庸置疑。首先,它可以显著降低软件中的缺陷比例;其次,它促进了知识共享,通过评审的过程,团队成员可以相互学习,增强对系统的整体理解;最......
  • 请写出如下代码运行的结果并解释为什么?[代码]
    由于您没有提供具体的代码,我将无法直接给出运行结果和解释。但是,我可以提供一个通用的方法来帮助您理解如何分析前端代码的运行结果。假设您有一段JavaScript代码,您可以按照以下步骤来分析其运行结果:阅读代码:首先,仔细阅读代码,理解其逻辑和目的。查看是否有变量声明、函数定义、......
  • Python 灵感收集贴:你的奇思妙想,我来代码实现!
    Python灵感收集贴:你的奇思妙想,我来代码实现!亲爱的粉丝朋友们!每天在键盘前敲敲打打,作为一个Python爱好者,我经常幻想用代码改变世界……嗯,至少是让生活中的小麻烦消失得无影无踪!......
  • 疫苗发布和接种预约系统(代码+数据库+LW)
    摘 要如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法,必须采用计算机来处理这些信息,因为传统方法对应计算机处理......
  • 疾病防控综合系统设计与实现(代码+数据库+LW)
    摘  要在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对疾病防控信息管理的提升,也为了对疾病防控信息进行更好的维护,疾病防控综合系统的出现就变得水到渠成不可缺......
  • 用 Hierholzer 算法求解欧拉回路
    欧拉回路是图论中的一个经典概念,其核心在于寻找一条路径,使得该路径遍历图中的每一条边且仅遍历一次,并最终回到起点。作为图论入门的第一个问题,我们已经对欧拉回路的两个基本判定条件很了解了:偶数度顶点条件:图中每个顶点的度数(即连接到该顶点的边的数量)必须为偶数。这是因为路径......