数学建模笔记(1):插值法

news2024/9/20 14:45:57

1.插值法的用途

在对数据进行处理的时候,我们往往会碰到由于数据量比较小的情况,这样的情况不利对数据进行分析。插值法就是是针对这种情况,模拟产生和原来数据相近的数据来为数据分析提供完整可靠的数据。

总结:插值法是一种自己生产数据,使原数据完整的方法,同时这些数据和原有的数据是具有相同规律的。

2.插值法的实现方法

插值法总体来讲就是我们高中导数中学过的拟合方法。在二维平面上,已知存在横坐标为x_{1},x_{2}...x_{n},纵坐标为y_{1},y_{2}...y_{n}的n个函数值,插值法的目标就是找到一个函数f(x),使得任意f(x_{i})=y_{i}。这个过程其实本质上就是找一个拟合函数来是所有点都落在这个拟合函数上。

常见的插值方法有:

  • 多项式拟合,使用一个多项式a_0+a_1x+a_2x^2+...+a_nx^n来对所有的函数点进行拟合。
  • 分段插值,将所有函数点分为几段,每一段采用一个多项式进行拟合。
  • 三角插值,比较复杂,多项式为三角多项式(即x替换为\sin x或者\cos x),与傅里叶变换有关。

一般在比赛中,前两种方法使用的更多,尤其是第二种。 

两点注意,证明唯一性的过程在此省略,第二点也很好理解,次数的高低影响的是拟合的效果。

获得多项式函数的方法

拉格朗日插值法

具体的公式如下:

f(x) = \sum_{i=0}^{n} f(x_i) \cdot l_i(x)

l_i(x) = \prod_{\substack{j=0 \\ j \neq i}}^{n} \frac{x - x_j}{x_i - x_j} 

其中的f(x)就是插值函数,在已知n个函数点的情况下,根据这n个点推导出插值函数的方法。 

但是拉格朗日插值法的问题在于,当我们尝试仅仅是用一个多项式对所有函数点进行拟合,随着多项式最高次数的增大,拟合的效果随着自变量的增大可能会出现较大的波动,与实际的趋势相差较大。

如下图所示,高次多项式在原点处的拟合效果尚可,但是当自变量增大时,误差就会很大了。

因此,我们需要效果更好,更加稳定的方法来进行插值。

分段插值法 

顾名思义,即将已知的函数点进行划分,当我们想要获得某一个未知横坐标下的函数值,我们可以选取距离该点最近的两个点或者三个点,构造两点之间的线性函数或者三点之间的二次函数(抛物线)进行插值。

分段二次插值的公式如下:

牛顿插值法

牛顿插值法的概念如下,系数是一个叫做差商的东西。

差商的定义如下,可以看到,差商的计算是一个递归的形式,k阶差商是由两个k-1阶差商构造而成的,一阶差商是不是很像没取极限的导数的定义?

最终整体公式的表现形式为

牛顿插值法相对于拉格朗日插值的优势在于,牛顿插值法的结果可以通过递归产生,因此每多增加一个点, 通过前面的函数递归即可完成,比拉格朗日更加简单。但是牛顿插值法也存在之前所说的震荡不稳定的问题,所以用处也不大。

Hermite插值法

上述的插值法其实仅仅考虑了插值函数在函数点处的函数值相等的问题,但是拟合效果的好坏还和函数的趋势(形态)有关,这就涉及函数的导数问题。因此Hermite插值法是想要获得更高精度的插值的很好选择。

Hermite多项式的定义如下

 Hermite多项式的计算方法:

Hermite插值通过构造高阶连续的插值多项式,要求函数值,导数值,甚至更高阶导数值相同使得插值结果更加平滑且精确。

三次分段埃尔米特插值法(最常用,MatLab中有直接的函数可用)

具体原理远离在这里不进行详细的描述,这个方法在matlab中有直接的函数pchip可以使用,这里就简单介绍一下pchip的使用方法。下面是一个简单示例。

其中,x代表已知的函数点的横坐标数组,y代表已知函数点的纵坐标数组,new_x代表需要进行插值的点的横坐标,new_y代表插值获得的纵坐标。pchip函数最终返回的是new_y这个纵坐标。

plot函数是绘图函数,他的传参形式可以总结为:需要进行绘制的点的横坐标+纵坐标+绘制形式(以字符串形式),可以绘制多个,如上,只需格式一样即可。

下面是plot函数中的绘制形式的总结,绘制形式可以进行组合,每个字符都代表一个类型的一种。在实例中,前一个使用的圆点的格式,后一个使用的是红色实线的格式。

最后的语句figure是用来给图片进行编号的。目的是防止当一个代码中出现了多个绘图的时候,如果不编号会进行覆盖。

最终的插值结果如下,可以看到插值的结果还是比较贴近原函数的。

三次样条插值(比上一个方法更加精确,也比较常用)

三次样条插值相比于上一个方法的精确之处在于,他要求插值函数在整个插值区间上二阶连续可微,在每个分段区间的端点处都要满足以下条件:

同样,matlab也提供了这个方法的实现函数spline,下面是简单示例和结果,和原来的sinx函数的贴合程度比较高。

当然,三次样条插值方法还可以用interpn加上方法类型的参数来实现。spline(x,y,new_x)等价于interpn(x,y,new_x,'spline');

n维数据的插值(少用)

上面的都是在一维数据的层面上进行,如果数据有多个维度,可以使用上面的interpn函数来进行插值。

格式为:Vq = interpn(X1, X2, ..., Xn, V, Xq1, Xq2, ..., Xqn);

x1,xn代表已知的点在各个维度上的分量值的序列,可以理解为不同的自变量的值;

V代表的是这些点的纵坐标(广义上的),维度与前边的x中的数据数量一样,可以理解为因变量的值。

xq则是最终要插值的序列,最终返回插值获得的因变量的序列。

其他还有一些有关绘图的技巧,我就不在这里介绍了。总结一下,常见的插值方法就是三次埃尔米特方法和三次样条插值,并且在matlab中都有对应函数可以直接实现,总体来说难度不大。

插值的应用场景,可以在数据的预处理阶段对数据进行补齐,也可以使用插值函数进行预测,插值的用处还是很多的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2037746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RAG应用深度解析:文件解析与内容提取的技术突破

在了解完[# 落地RAG系列:RAG入门及RAG面临的挑战和解决方案!!]Naive RAG工作流程以及Naive RAG存在的问题后,我们将先从离线部分的文件解析开始技术分析与落地,朝着高级RAG的方向前进! 文件解析的难点 在R…

Keepalived 高可用集群详解和配置

Keepalived 高可用集群 集群类型 1、LB(Load Balance):负载均衡 LVS:四层负载均衡 HAProxy:七层/四层 负载均衡 nginx:七层负载均衡 (http/upstream,stream/upstream) 2、HA(High Availa bili…

fastapi之WebSockets

文章目录 WebSockets基本概念FastAPI 中的 WebSocket 支持WebSocket 应用示例示例 1: 简单的 WebSocket 连接解释 示例 2: 广播消息的 WebSocket 实现解释 客户端代码示例 完整示例项目结构服务器端代码 (main.py)解释 简单的前端客户端 (static/index.html)解释 测试 相关代码…

交通拥堵辅助与自动化

Traffic-Jam Assistance and Automation 交通拥堵辅助与自动化 Abstract Traffic jams are situations where a high degree of automation could give a large benefit to customers. In addition, the relatively simple situation of a traffic jam means that a high deg…

使用pytest+selenium编写网页UI自动化脚本和用例

1 UI自动化测试 UI自动化测试(User Interface Automation Testing)是一种通过编写脚本或使用自动化测试工具,对界面(UI)进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面,自动化执行用户…

C语言学习——函数(数组作为函数参数)

目录 8.7数组作为函数参数 数组元素作函数实参 数组名作参数函数 8.7数组作为函数参数 我们知道可以用变量作函数参数,显然,数组元素也可以作函数实参,其用法与变量相同。此外,数组名也可以作实参和形参,传递的是数…

【区块链教程】如何使用自动化脚本创建小狐狸地址

在很多场景下,不管是撸毛也好,批量操作也好,都需要使用到大量的qianbao地址。 如何一键创建,也成为了很多人想学的技术。 创建地址的自动化脚本可以极大地简化在区块链开发和测试中的管理流程。以下是一个基本的流程和示例脚本&am…

知识竞赛中必答题环节竞赛规则有哪些设计方案

必答题环节被广泛用到各类知识竞赛活动中,往往被安排在第一环节,是知识竞赛中的热身环节。那么,常用的必答题环节规则应怎么设计呢?下面列出的这些大家可以参考一下。 1.可以分个人必答题和团队必答题。个人必答题可以分别记个人…

为什么要用static

前言 本文主要介绍C/C中的static,以及为什么要用static,别人的代码中有时会突然使用用static,看的一脸蒙圈,为什么要用static,我不用难道不行吗?对啊为什么呢? 正文 static是C/C中一个很重要…

浅试扫雷游戏(简易版)

目录 1. 扫雷游戏分析和设计 1)扫雷游戏的功能说明 2)游戏的分析和设计 2.扫雷游戏的代码实现 1. 扫雷游戏分析和设计 1)扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子…

“前缀和”专题篇二

目录 和为K的子数组 和可被K整除的子数组 连续数组 矩阵区域和 和为K的子数组 题目 思路 我们可能想到的是,从头到尾扫描数组,然后分别计算以该位置为开始,一直到数组末尾,符合和为K的子数组,但是这种方法的时间复…

线上研讨会 | CATIA助力AI提升汽车造型设计

报名链接: 2024探索之旅第二季

Linux Shell基础常用脚本命令及应用案例

文章目录 常用的 Shell 命令1. 变量2. 注释3. 输出4. 输入5. 条件判断6. 循环7. 函数8. 运算9. 流程控制10. 文件和目录操作11. 错误处理 Shell 脚本应用案例1. Hello World 脚本2. 创建系统账户及设置密码3. 日志文件备份4. 一键部署 LNMP 环境5. 检查磁盘空间6. 自动安装软件…

Nginx反向代理的使用场景

Nginx Vue使用npm命令打包:npm run build Nginx的定位:主要用于做反向代理,一般都是用它来做前端页面的服务器,动态资源代理到后端服务器。这样做的好处是可以避免跨域请求带来的不便。 我们知道,在前端我们开发的时…

三、AI工作流(低代码)的趋势即将崛起,输入-按钮组件详解,带你轻松玩转按钮组件

对工作流感兴趣的小伙伴可以去试一试。🔥偷偷的告诉你,它的GPTo4.0 不要💰。传送门:https://www.nyai.chat/chat?invitenyai_1141439 一、能用AI工作流介绍 能用AI-工作流是一个“低代码”工具、它也是个人或者中小企业的提效工…

C#语言基础速成Day07

“知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。” 目录 前言文章有误敬请斧正 不胜感恩&#xff01;||Day07 C#常见数据结构&#xff1a;1. 集合&#xff08;Collection&#xff09;1.1 **List<T>**1.2 **H…

MATLAB 样条插值

订阅专栏后,复制完整代码到MATLAB上面,即可获得跟本文相同的运行结果。 点击以下链接也可下载: https://download.csdn.net/download/callmeup/89635701 MATLAB插值代码 插值在MATLAB里面很简单,一个函数即可。 本文给出了已知点的坐标、待插值点的横坐标,可按要求插出来…

使用 Gradio 开发 ChatBot

Gradio 提供了 ChatInterface 组件&#xff0c;组件包括一个输入框、一个 ChatBox 区域、和一些按钮。同 interface&#xff0c;ChatInterface 通过一个处理函数进行处理&#xff0c;处理函数包括两个参数 message 和 history&#xff0c;message 是当前用户提交的问题&#xf…

[图解]需要≠需求-《分析模式》漫谈

1 00:00:00,760 --> 00:00:02,910 今天的《分析模式》漫谈 2 00:00:02,920 --> 00:00:04,180 我们来说一下 3 00:00:04,490 --> 00:00:06,490 需要不等于需求 4 00:00:10,490 --> 00:00:11,760 还是第一章 5 00:00:13,120 --> 00:00:15,020 这里 6 00:00:1…

[C#]实现GRPC通讯的服务端和客户端实例

最近要做两个软件之间消息的通讯&#xff0c;学习了一下GRPC框架的通讯。根据官方资料做了一个实例。 官方资料请参考&#xff1a;Create a .NET Core gRPC client and server in ASP.NET Core | Microsoft Learn 开发平台&#xff1a;Visual Studio 2022 开发前提条件&#x…