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

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.rhkb.cn/news/402459.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏安全入门-扫雷分析远程线程注入

前言 无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏 – 扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好…

PHPStorm 环境配置与应用详解

​ 大家好,我是程序员小羊! 前言: PHPStorm 是 JetBrains 出品的一款专业 PHP 集成开发环境(IDE),凭借其智能的代码补全、调试功能、深度框架支持和前端开发工具,为用户提供了丰富的功能和工具…

Systools Outlook PST Recovery Outlook PST邮箱邮件数据修复工具下载

可正常激活使用,非常强大好用的PST邮箱邮件数据文件修复工具 下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1bfkVNrgdaVS2MkTnW19Zqw?pwdu2sj 提取码:u2sj

Linux进程间通信学习记录(无名管道)

0.Linux进程间通信的方式 (1).从UNIX继承过来的通信方式 无名管道(pipe) 有名管道(fifo) 信号(signal) (2).System V IPC 共享内存 消息队列 信号灯集 &am…

Python环境安装及PIP安装(Mac OS版)

官网 https://www.python.org/downloads/ 安装python python-3.12.1-macos11.pkg下载后,安装一直下一步即可 验证是否安装成功,执行python3命令和pip3命令 配置环境变量 获取python3安装位置并配置在.bash_profile #查看python路径 which python3#…

centos8以上系统安装docker环境

由于docker官方更新了相关镜像路由,导致国内用户无法正常手段安装使用docker,本人推荐使用下面操作进行安装。 1.docker-ce安装 # 添加docker-ce仓库,本次使用的是阿里云的仓库 dnf config-manager --add-repo https://mirrors.aliyun.com/do…

CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models

摘要 随着预训练的视觉语言模型(如 CLIP)的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中,来调整预训练的视觉语言模型。具体来说,CoOp 将提示中的上下文…

【C语言初阶】C语言指针全攻略:解锁C语言深层奥秘的钥匙

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言操作符 🌹🌹期待您的关注 🌹🌹 ❀指针 📒1. 指针和指…

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览(pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件) 其中 除p…

C 408—《数据结构》算法题基础篇—数组(通俗易懂)

目录 Δ前言 一、数组的合并 0.题目: 1.算法设计思想: 2.C语言描述: 3.算法的时间和空间复杂度 : 二、数组元素的倒置 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、数组中特定值元素的删除 0.题目 : …

SpringBoot3 + Flowable7 工作流引擎使用笔记

目录 Flowable 简介流程设计器安装使用 SpringBoot 3 整合表结构流程部署启动流程流程审批流程挂起和激活任务分配固定分配表达式分配值表达式方法表达式 监听器分配 流程变量运行时变量历史变量 身份服务候选人拾取任务归还任务指派给别人候选人组创建用户创建用户组用户关联用…

VueUse 基于 Vue 3 Composition API 的高质量 Hooks 库

VueUse 是什么? VueUse 是基于 Vue 3 Composition API 的高质量 Hooks 库。例如获取滚动的距离 VueUse 官网:VueUse | VueUse VueUse 什么使用? 1、通过npm安装 VueUse npm i @vueuse/core 2、搜索需要使用的函数,例如搜索 useScroll 滚动 3、使用useScroll 滚动函数 …

C语言传递指针给函数

C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值 实例1:获取系统的时间值 能接受指针作为参数的函数,也能接受数…

为什么Pandas是最流行的Python数据分析库?

本文将从Python生态、Pandas历史背景、Pandas核心语法、Pandas学习资源四个方面去聊一聊Pandas,期望能带给大家一点启发。 一、Python生态里的Pandas 五月份TIOBE编程语言排行榜,Python追上Java又回到第二的位置。Python如此受欢迎一方面得益于它崇尚简…

零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?

前言 本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇…

Redis13-多级缓存

目录 概述 JVM进程缓存 Caffeine 实现进程缓存 Lua语法 初识Lua 变量和循环 Lua的数据类型 声明变量 循环 条件控制、函数 函数 条件控制 实现多级缓存 安装OpenResty OpenResty快速入门 请求参数处理 查询Tomcat 发送http请求的API 封装http工具 CJSON工…

CSS小玩意儿:文字适配背景

一&#xff0c;效果 二&#xff0c;代码 1&#xff0c;搭个框架 添加一张背景图片&#xff0c;在图片中显示一行文字。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" conte…

【Python】高效的Web自动化测试利器—Python+Playwright快速上手自动化实战指南(限时开放)

文章目录 前言一.playwright是什么二.python引入playwright1.安装2.playwright命令行参数3.playwright codegen自动生成代码4.Chrome和Chromium有什么关系&#xff1f; 三.基本概念1. 无头浏览器&#xff08;Headless Browser&#xff09;2.同步和异步模式操作playwright2.1.同…

SQL每日一练-0815

今日SQL题难度&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 计算每个产品类别在每个月的总销售额和总销量。找出每个月销售额最高的产品类别&#xff0c;显示类别名称、销售月份、总销售额和总销量。 2、表和虚拟数据 现有两个表&#xff1a;Products 和…

RockerMQ学习

消息中间件以前常用RabbitMQ和ActiveMQ&#xff0c;由于业务需要&#xff0c;后期业务偏向大数据&#xff0c;现着重学习一下RocketMQ&#xff08;RocketqMQ原理同ctg-mq&#xff09;&#xff0c;后续更新Kafka 一、RocketMQ特性 Kafka特性 &#xff08;高性能分布式&#xff…