清风数学建模——插值算法

news2024/10/5 21:14:07

插值法

文章目录

  • 插值法
      • 作用
      • 定义
      • 概念
      • 一维插值问题
      • 一维插值多项式原理
        • 定理
      • 拉格朗日插值法和牛顿插值法
      • 埃尔米特插值
      • 分段线性插值
      • 分段三次埃尔米特插值法代码
      • 三次样条插值及其代码
      • 例子
      • n维数据的插值(了解)

作用

数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,但可能出现数据极少或者数据缺失的情况,此时数据并不能支撑分析,这时候就需要用到一些数学的方法,去模拟产生一些新的但又比较靠谱的值来满足数据的需求。以上提到正是插值法的作用

定义

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

概念

常用的三种插值法的概念

  1. 插值多项式。若P(x)是次数不超过n的代数多项式,即

P ( x ) = a 0 + a 1 x + . . . + a n x n , P(x)=a_0+a_1x+...+a_nx^n, P(x)=a0+a1x+...+anxn,

  1. 若P(x)为分断多项式,就称分段插值
  2. 若P(x)为三角多项式,就称三角插值

本文只介绍多项式插值和分段插值。

一维插值问题

image-20230807212542148

  • 已知一些数据xi,yi,这些数据能够模拟出一个f(x)函数(图像)。通过将新的数据x* 带入f(x)函数中求得y*

一维插值多项式原理

定理

image-20230808110433502

image-20230808110445329

  • 已知矩阵X和矩阵Y都是可逆矩阵,那么AX=Y可以化成A=YX-。那么若矩阵A的行列式不为0,则方程组有唯一解
  • 行列式可以用范德蒙德行列式法计算
  • 若方程组有唯一解,那么多项式确定唯一存在

拉格朗日插值法和牛顿插值法

image-20230808114135919

image-20230808112027598

红色是目标函数,蓝色是通过拉格朗日插值法模拟出来的函数图像。可以看到在次数增多时,两端图像产生明显的震荡。

  • 多项式插值中常用的有拉格朗日插值法。但该方法在高次插值时会出现两端波动极大,产生明显的震荡,即产生龙格现象。因此不熟悉曲线运动趋势的前提下,不要轻易使用高次插值。加上函数难以使用,因此在数模比赛里多项式插值也很少使用

image-20230808114246325

  • 牛顿插值法每次只需要在前n项的基础上,即原来的函数上添加新的项就能产生新的函数,与拉格朗日插值法相比,牛顿插值法计算过程具有继承性。
  • 但牛顿插值法也存在龙格现象问题。

总结一下:

  • 插值多项式次数越高,精度未必显著提高
  • 插值多项式次数越高,摄入误差可能显著增大
  • 实际上不仅要求插值函数与被插值函数在所有节点处有相同的函数值,它也需要在一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值。因此这种插值多项式并不能全面反映被插值函数的性态

基于插值多项式的缺点,在数模比赛中通常会使用分段插值法

埃尔米特插值

image-20230808114542143

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

分段线性插值

image-20230808113318767

若新插入的值xi位于xj-1到xj之间,那么只需要模拟出xj-1到xj之间的插值函数即可。

分段三次埃尔米特插值法代码

Matlab有内置的函数,其实现过程已经帮我们封装好了,会调用就行了

函数原型

p=pchip(x,new_x)

x是已知的样本点的横坐标;y是已知的样本点的纵坐标;new_x是要插入对应的点的横坐标,通过pchip函数模拟出new_x对应的纵坐标

假设x的范围是[-pi,pi];y=sin(x);new_x=-pi:0.1:pi(从-pi到pi间隔0.1一个横坐标)

那么可以这样调用

x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p=pchip(x,y,new_x);%%p是通过Hermite插值法模拟出来的对应new_x的纵坐标
plot(x,y,'o',new_x,p,'r-');
legend('样本点','三次埃尔米特插值','Location','southeast');

image-20230808122831263

可以看到样本点函数对应的是o点图,而埃尔米特插值法模拟出来的函数图像是红色-线

三次样条插值及其代码

image-20230808123117149

  • 三次样条插值的matlab内置函数是

    p = spline (x,y, new_x)
    
  • x是已知的样本点的横坐标;y是已知的样本点的纵坐标;new_x是要插入处对应的横坐标

同样的用三次样条插值法模拟出来new_x对应的图像

x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p1=pchip(x,y,new_x);%%p是通过Hermite插值法模拟出来的对应new_x的纵坐标
p2=spline(x,y,new_x);
plot(x,y,'r-',new_x,p1,'b.',new_x,p2,'g*');

legend('样本点','三次埃尔米特插值','三次样条插值','Location','southeast');

image-20230808130016365

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

例子

先有2009到2018的中国人口数,通过三次埃尔米特插值预测或三次样条插值预测预测出2019到2023的中国人口数

year=2009:2018;
population=[133126,133770,134413,135069,135738,136427,137122,137866,138639, 139538];
p1=pchip(year,population,2019:2023);
p2=spline(year,population,2019:2023);
plot(year,population,'r-',2019:2023,p1,'b.',2019:2023,p2,'g*');
legend('样本点','三次埃尔米特插值预测','三次样条插值预测','Location','SouthEast')

image-20230808132427804

另外若需要作出两张图形,需要在作图前标明是第几张图,否则系统判定是只在 figure(1)上作图,后来的图像会将前面的图像刷新掉

image-20230808132908820

n维数据的插值(了解)

函数原型

p=interpn(x1,x2,...,xn,y,new_x1,new_x2,...,new_xn,method)
  • x1,x2,…,xn是已知的样本点的横坐标
  • y是已知的样本点的纵坐标
  • new_x1,new_x2,…,new_xn是要插入点的横坐标
  • method是要插值的方法
    • ‘spline’:三次样条插值法;(最为精准)
    • ‘pchip’:三次埃尔米特插值法
    • ‘linear’:线性插值(默认算法)
    • ‘cubic’:三次插值
    • ‘nearest’:最邻近插值算法
x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p2=spline(x,y,new_x);

等价于

x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p2=interpn(x,y,new_x,'spline');
  • ‘nearest’:最邻近插值算法
x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p2=spline(x,y,new_x);

等价于

x=-pi:pi;
y=sin(x);
new_x=-pi:0.1:pi;
p2=interpn(x,y,new_x,'spline');

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

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

相关文章

QT笔记——QT自定义事件

我们有时候想发送自定义事件 1&#xff1a;创建自定义事件&#xff0c;首先我们需要知道它的条件 1&#xff1a;自定义事件需要继承QEvent 2&#xff1a;事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间&#xff0c;在QEvent::User之前 是预留给系统的事件 3&#…

[ubuntu]创建root权限的用户

一、创建新用户 1、创建新用户 sudo useradd -r -m -s /bin/bash 用户名 # -r&#xff1a;建立系统账号 -m&#xff1a;自动建立用户的登入目录 -s&#xff1a;指定用户登入后所使用的shell2、手动为用户设置密码 passwd 用户名 二、为用户增加root权限 1、添加写权限 ch…

适配器模式:将不兼容的接口转换为可兼容的接口

适配器模式&#xff1a;将不兼容的接口转换为可兼容的接口 什么是适配器模式&#xff1f; 适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换为客户端所期望的另一个接口。它允许不兼容的类能够合作&#xff0c;使得原本由于接口不匹配而无法工作的类能够一…

1.Fay-UE5数字人工程导入(UE数字人系统教程)

Fay-UE5数字人工程导入 1、工程下载&#xff1a;xszyou/fay-ue5: 可对接fay数字人的ue5工程 (github.com) 2、ue5下载安装&#xff1a;Unreal Engine 5 3、ue5插件安装 依次安装以下几个插件 4、双击运行工程 5、切换中文 6、检查插件已启用 7、测试运行

一文看懂intel处理器型号

cpu型号命名 cpu 后缀 外形/功能类型/细分市场后缀优化/设计台式机K高性能&#xff0c;未锁频Φ需要独立显卡S特别版T功耗优化生活方式X/XE最高性能&#xff0c;未锁频移动设备&#xff08;笔记本电脑 2、2 合 1 电脑&#xff09;HX最高性能&#xff0c;所有 SKU 未锁频HK高性…

Python源码:使用Tkinter写一个诗词答题软件

废话不多&#xff0c;直接上源码 # 导入用到的库 import tkinter from tkinter import * from tkinter.messagebox import * import random# 准备一个诗词题库列表 shici_list [(词苑千载&#xff0c;群芳竞秀&#xff0c;盛开一枝女儿花"说的是哪位历史上的哪位才女&am…

陀螺玩具跨境电商亚马逊CPC认证

陀螺指的是绕一个支点高速转动的刚体。陀螺是中国民间最早的娱乐工具之一.形状上半部分为圆形&#xff0c;下方尖锐。从前多用木头制成&#xff0c;现代多为塑料或铁制。玩时可用绳子缠绕&#xff0c;用力抽绳&#xff0c;使直立旋转。或利用发条的弹力旋转。传统古陀螺大致是木…

移动端自动化测试实战

UI自动化测试的价值 1、提升回归测试的效率 2、可以进行兼容性测试 UI 自动化测试应用场景 • 冒烟测试自动化&#xff1a;提测之前自动断言提测质量&#xff0c;提供准入参考。 • 功能测试自动化&#xff1a;辅助 QA 与测试工程师的快速验证。 • 验收测试自动化&#xf…

大模型AI人才培养研习会,上海、武汉站同期招募!

伴随预训练大语言模型技术引发的产业变革&#xff0c;市场对AI人才需求也同样发生着深刻变化&#xff0c;教育迎来了新的机遇与挑战。由中国自动化学会主办&#xff0c;百度公司联合知名高校承办的大模型AI人才培养研习会&#xff0c;首场将于8月19日在武汉、上海双城同期举办&…

python安装xgboost报错

ERROR: Could not find a version that satisfies the requirement xgboost (from versions: none) ERROR: No matching distribution found for xgboost 解决办法&#xff1a; 换成国内的pip源 pip install xgboost -i http://pypi.doubanio.com/simple/ --trusted-host py …

python3学习--使用pandas 数据透视表分析数据--入门示例

什么是透视表&#xff1f; 透视表是一种可以对数据动态排布并且分类汇总的表格格式&#xff0c;可以以多种方式和视角查看数据特征 Pandas库提供了一个名为pivot_table的函数&#xff0c;它将一个特性的值汇总在一个整洁的二维表中。 使用示例 pivot_table函数说明 pandas.…

没有硬核技术,怎么抓得住元宇宙的风口?

自 2021 年起&#xff0c;Web 3.0 与元宇宙逐步成为全球科技界的热门概念。Web 3.0 是技术发展方向的未来&#xff0c;元宇宙是应用场景和生活方式的未来&#xff0c;二者之间是相辅相成、一体两面的依存关系。科技巨头如 Meta、谷歌、苹果、华为、腾讯、OPPO 等均已在积极布局…

7.3 详解NiN模型--首次使用多层感知机(1x1卷积核)替换掉全连接层的模型

一.前提知识 多层感知机&#xff1a;由一个输入层&#xff0c;一个或多个隐藏层和一个输出层组成。&#xff08;至少有一个隐藏层&#xff0c;即至少3层&#xff09; 全连接层&#xff1a;是MLP的一种特殊情况&#xff0c;每个节点都与前一层的所有节点连接&#xff0c;全连接…

stm32项目(6)——基于stm32的人体检测系统

目录 1.功能设计 2.硬件方案 1.单片机选择 2.人体传感器 3.报警模块 3.程序设计 4.课题意义 5.未来发展 1.功能设计 本系统为日常生活而开发的人体感应报警系统&#xff0c;主体通过HC-SR501模块达到感知人体靠近&#xff0c;检测到人体后单片机控制蜂鸣器和LE…

MyBatis动态sql标签帮你轻松搞定sql拼接

动态sql介绍 由于在开发过程不同的业务中会用到不同的操作条件&#xff0c;如果每个业务都拼接不同sql语句的话会是一个庞大的工作量&#xff1b;此时动态sql就能解决这个问题&#xff0c;可以针对不确定的操作条件动态拼接sql语句&#xff0c;根据提交的条件来完成业务sql的执…

【LeetCode 75】第二十四题(2390)从字符串中移除星号

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个字符串&#xff0c;然后字符串中包含星号*&#xff0c;要求每个星号消除一个从星号左边起最近的一个字符&#xf…

随着野火的增加,甲烷排放也会增加

2020 年对加利福尼亚州造成严重破坏的野火使大气中充满了强效温室气体。 2020 年&#xff0c;溪火烧毁了北加州的内华达山脉。图片来源&#xff1a;Zachary Cava/Flickr&#xff0c;CC BY-NC-SA 2.0 2020 年&#xff0c;在高温和干旱的推动下&#xff0c;加州野火烧毁了超过160…

揭示CTGAN的潜力:利用生成AI进行合成数据

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 我们都知道&#xff0c;GAN在生成非结构化合成数据&#xff08;如图像和文本&#xff09;方面越来越受欢迎。然而&#xff0c;在使用GAN生成合成表格数据方面所做的工作很少。合成数据具有许多好处&#x…

Ae 效果:CC Spotlight

透视/CC Spotlight Perspective/CC Spotlight CC Spotlight&#xff08;CC 聚光灯&#xff09; 主要用途是创建和控制逼真的聚光灯效果。通过调整这些属性&#xff0c;可以模拟出各种不同的照明环境和效果&#xff0c;比如舞台照明、日出日落、特定的颜色照明等。 ◆ ◆ ◆ 效…

儿童台灯什么光源好?如何挑选儿童护眼台灯

很多家长有时候会说孩子觉得家里的台灯灯光刺眼&#xff0c;看书看久了就不舒服。这不仅要看光线亮度是否柔和&#xff0c;还要考虑台灯是不是有做遮光式设计。没有遮光式设计的台灯&#xff0c;光源外露&#xff0c;灯光会直射孩子头部&#xff0c;孩子视线较低&#xff0c;很…