数学建模第六天:数学建模算法篇之插值及MATLAB实现

news2024/9/22 18:27:28

 

目录

 一、前言

1、引例

2、插值与拟合模型

二、插值

1、插值相关定义

2、拉格朗日插值

3、分段线性插值

4、matlab实现

5、二维插值及matlab实现


 一、前言

1、引例

        伍老师最近苦不堪言,最近胡吃海喝,管不住嘴,感觉自己最近张胖了,于是给自己制定了到2023年6月要减到45kg的目标(已知现在是2023年的3月)。于是伍老师兴致冲冲的找到了会数学建模的程序员小李,让小李帮她分析,这个月要减到多重才算完成目标。

        小李一看,来活儿了,为了体现出自己的专业素养,于是,他向伍老师索要了近两年的伍老师的体重数据。伍老师反手一个大嘴巴子,并且说:“真有你的,竟然敢问女生的体重,不知道这很不礼貌吗?”
        最后,伍老师还是妥协了,给了小李自己这两年的相关体重,如下表:(体重单位:kg)

年月2022.32022.72022.82022.112023.12023.32023.6
体重52.554534748.445

        其余的月份,伍老师要么是没有称过体重,要么就是称过体重,但是数据没有留存。请大家思考一下,如果你是小李,你怎么帮伍老师预测体重?

2、插值与拟合模型

        插值:求过已知有限个数据点的近似函数。

        拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。

        插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显。

二、插值

1、插值相关定义

        其中已知有n+1个节点(x_{j},y_{j})(其中j=0,1,2,3……,n,x_{j}各不相同),求任意插值点x^{*}(\neq x_{j})处的插值y^{*}

       我们需要构造一个(相对简单的)函数y=f(x),通过全部节点,即f(x_{j})=y_{j},(j=0,1,2……n),再用f(x)计算插值。即f(x^{*})=y^{*}

2、拉格朗日插值

        已知函数f(x)在n+1个点x_{0},x_{1},\cdot \cdot \cdot \cdot \cdot x_{n}处的函数值为y_{0},y_{1},\cdot \cdot \cdot \cdot \cdot y_{n}。求一n次多项式函数P_{n}(x),使其满足:P_{n}(x_{i})=y_{i},i=1,2,3……n。

        解决此问题的拉格朗日插值多项式公式为:

         其中L(x)为n次多项式,它的表达式为:

         它也被称为拉格朗插值基函数。我们以例题为例,算一算使用拉格朗日插值,得到伍老师五月的预测体重。我们以2022.3为起点,得到新的表格(设女性体重到18岁趋于稳定,而伍老师在2022年三月刚好经历成年后的第30个月):

年月30343538404245
体重52.554534748.445

x=42
z1=(x-34)*(x-35)*(x-38)*(x-40)*(x-45)
t1=(0-4)*(0-5)*(0-8)*(0-10)*(0-15)
z2=(x-30)*(x-35)*(x-38)*(x-40)*(x-45)
t2=(4-0)*(4-5)*(4-8)*(4-10)*(4-15)
z3=(x-30)*(x-34)*(x-38)*(x-40)*(x-45)
t3=(5-0)*(5-4)*(5-8)*(5-10)*(5-15)
z4=(x-30)*(x-34)*(x-35)*(x-40)*(x-45)
t4=(8-0)*(8-4)*(8-5)*(8-10)*(8-15)
z5=(x-30)*(x-34)*(x-35)*(x-38)*(x-45)
t5=(10-0)*(10-4)*(10-5)*(10-8)*(10-15)
z6=(x-30)*(x-34)*(x-35)*(x-38)*(x-40)
t6=(15-0)*(15-4)*(15-5)*(15-8)*(15-10)
z=52.5*z1/t1+54*z2/t2+53*z3/t3+47*z4/t4+48.4*z5/t5+45*z6/t6

        不建议写成一个完整的等式,因为这样算不出正确的结果,而且运气差的话还会得到一个相当大的负数或者正数。上述代码的结果为:

         也就是说,伍老师可以胡吃海喝,随便长胖。但是当小李兴致冲冲的把结果交给伍老师时,伍老师反手又给了小李一个大嘴巴子:“当我憨呢?别人减肥前跑步锻炼,你这个程序员的建议却是让我胡吃海喝?”

        所以说,用拉格朗日插值法,不一定能求出最好的结果,而且也有些许不合理。比如说,请大家用上述代码预测一下伍老师在2023年7月的体重大家得出的结果如下:

 

        直接瘦成纸片人,很不合理,对吧?具体原因是因为,再研究插值问题的初期,所有人都想当然的认为,插值多项式的次数越高,插值精度越高。Runge通过对一个例子的研究发现,上述结论仅仅在插值多项式的次数不超过七次时成立;插值多项式的次数超过七时,插值多项式会出现严重的震荡现象,称为Runge现象。而我们的例子是五次的,虽不像七次那么多,但依然有这种震荡现象

3、分段线性插值

        相比于拉格朗日插值,分段线性插值要容易许多,大家看下图就明白了:

 其函数表达式为:

其特点为计算量与n无关,但是n越大,误差越小。

4、matlab实现

函数:

yi=interp1(x,y,xi,'method')

各个参数说明:

①x,y为插值点,通常为向量

②xi、yi为被插值点,通常为向量

③method为插值方法,有nearest最邻近插值、linear线性插值、spline三次样条插值、cubic立方插值这几种。

我们用例题用三次样条插值测试一下其合理性:

x=[30 34 35 38 40 45];
y=[52.5 54 53 47 48.4 45];
x1=42;
y1=interp1(x,y,x1,'spline')
xi=30:1/1000:45;
yi=interp1(x,y,xi,'spline');
plot(x,y,'o',xi,yi)

 y1输出的结果为51.35kg,结果图如下:

这个故事告诉我们,体重反弹并不可怕,因为这很有可能是成功减肥的前兆!

5、二维插值及matlab实现

        伍老师为了更好的减肥,决定去爬武当山,刚翻过了一个山头就已经开始气喘吁吁了,于是伍老师边喘气边问:“这山,爬的,好,好累,到底有,,多高啊?”已知武当山在某些位置的高度,请预测一下,这座山的最高处有多高?

        已知,横坐标方向每隔400米,纵坐标方向每隔400米相应的海拔如下:

 我们先画出大致的3D图,代码与图形如下:

x=0:400:4400;
y=0:400:2800;
z=[370 470 550 600 670 690 670 620 580 450 400 300 ;
  510 620 730 800 870 850 780 720 650 500 200 300 ;
  650 760 880 970 1020 1050 1020 830 900 700 300 500;
   740 880 1080 1130 1250 1280 1230 1040 900 500 700 780;
   830 980 1180 1320 1450 1420 1400 1300 700 900 850 840;
    950 1190 1370 1380 1410 1430 1450 1470 1080 940 780 620;
   930 930 960 1100 1250 1300 1200  980 850 750 550 500 ;
   870 890 910 950 1000 1110 1080 820 690 540 380 300];


mesh(x,y,z)
rotate3

 

 相应的插值函数为:

z=interp2(x0,y0,z0,x,y,’method’)

各个参数说明:

①x0,y0、z0为插值点,通常为矩阵

②x、y为被插值点,通常为向量

③method为插值方法,有nearest最邻近插值、linear线性插值、cubic立方插值这几种。

则我们使用相应的代码段(精度:10米)来预测一下,最高峰有多少米:

x=0:400:4400;
y=0:400:2800;
z=[370 470 550 600 670 690 670 620 580 450 400 300 ;
  510 620 730 800 870 850 780 720 650 500 200 300 ;
  650 760 880 970 1020 1050 1020 830 900 700 300 500;
   740 880 1080 1130 1250 1280 1230 1040 900 500 700 780;
   830 980 1180 1320 1450 1420 1400 1300 700 900 850 840;
    950 1190 1370 1380 1410 1430 1450 1470 1080 940 780 620;
   930 930 960 1100 1250 1300 1200  980 850 750 550 500 ;
   870 890 910 950 1000 1110 1080 820 690 540 380 300];
mesh(x,y,z)
xi=linspace(0,10,4400);  %加密横坐标数据到450个
yi=linspace(0,10,2800);  %加密纵坐标数据到290个
[xii,yii]=meshgrid(xi,yi);  %生成网格数据
zii=interp2(x,y,z,xii,yii,'cubic');  %插值
mesh(xii,yii,zii)  %加密后的地貌图
hold on     % 保持图形
[xx,yy]=meshgrid(x,y);  %生成网格数据
plot3(xx,yy,z+0.1,'ob')  %原始数据用‘O’绘出


        跑完该代码之后,观察一下峰值,就知道了最高海拔是多少了!

        好啦,本期的数学建模课就到此结束啦,感兴趣的观众老爷们给小编一个小心心好吗?

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

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

相关文章

【数据去重】海量数据实时去重方案

文章目录 Prologue布隆过滤器去重什么是布隆过滤器实现的核心思想怎么理解 内嵌RocksDB状态后端去重引入外部K-V存储去重 Prologue 数据去重(data deduplication)是我们大数据攻城狮司空见惯的问题了。除了统计UV等传统用法之外,去重的意义更…

信号完整性分析基础知识之传输线和反射(四):不连续点和端接

每当信号遇到阻抗变化,就会出现反射现象,反射对信号质量影响很大。信号完整性工作最重要的部分之一就是预测不连续点对信号的影响,以及设计工程可接受的备选方案。 尽管电路板在设计上是可控阻抗互连,但是信号在以下结构中仍然会遇…

如何选择最佳的实时聊天软件

在客户服务和支持领域,实时聊天正在改变游戏规则已不是什么秘密。从推动销售到提升客户体验和提高保留率,实时聊天已成为与客户互动和支持的一种全新的方式。客户和支持专业人员都注意到了这一点。 研究发现,高达41%的消费者更喜欢实时聊天&…

李宏毅 深度学习

目录 深度学习与自然语言处理 | 斯坦福CS224n 课程带学与全套笔记解读(NLP通关指南完结)pytorch快速入门csdn快速入门OS包PIL包Opencv包Dataset类Tensorboard的使用torchvision.transforms 的使用torchvision中数据集的使用DataLoader的使用(torch.util…

【C++】:想知道如何实现互译字典吗?来看二叉搜索树

二叉搜索树好文! 文章目录 前言一、实现搜索二叉树二、二叉搜索树的应用 1.K模型2.KV模型总结 前言 二叉搜索树概念 : 二叉搜索树又称二叉排序树,它或者是一棵空树 ,或者是具有以下性质的二叉树 : 若它的左子树不为空&#xff0…

Orcale中OCILogon和OCIServerAttach登录方式的区别分析

参考文档《Oracle Call Interface Programmers Guide》 在Orcale和DM数据库提供的API中,通过OCI方式接口连接数据库的方法有多个,这里只讨论OCILogon和OCIServerAttach的比较。 1、官方描述 根据文档里的描述: OCILogon():This function is…

DJ4-5 路由和选路

目录 一、路由与转发的相互作用 二、路由的基本概念 1. 默认路由器 2. 路由算法 三、网络的抽象模型 1. 节点图 2. 费用 Cost 四、路由算法分类 1. 静态路由算法 2. 动态路由算法 3. 全局路由算法 4. 分布式路由算法 一、路由与转发的相互作用 二、路由的基本概念 …

美团赴抖音之“约”:让本地生活补贴大战来得更猛烈些?

面对抖音在本地生活领域的强势挑战,美团似乎准备好了正面迎战。 近期,美团动作频频。最开始,美团在美团App美食页面下的“特价团购”打出“限时补贴,全网低价”的口号。对此,一位行业人士分析称,“之前美团…

java commons-io 工具类的使用

commons-io是第三方程序员编写的工具类,并不是java本身带的方法。是在java提供的工具类基础上,开发的工具类。简化了代码的用法,可以提升开发效率。 用法 1.下载jar包 2.在程序中新建lib目录,把jar包放进去 3.在jar包上右键&…

learn_C_deep_6 (布尔类型、布尔与“零值“、浮点型与“零值“、指针与“零值“的比较)

目录 语句和表达式的概念 if语句的多种语法结构 注释的便捷方法(环境vs) if语句执行的过程 逻辑与&& 逻辑或|| 运算关系的顺序 else的匹配原则 C语言有没有布尔类型 C99标准 sizeof(bool)的值为多少? _Bool原码 BOOL…

音视频八股文(6)-- ffmpeg大体介绍和内存模型

播放器框架 常用音视频术语 • 容器/文件(Conainer/File):即特定格式的多媒体文件, 比如mp4、flv、mkv等。 • 媒体流(Stream):表示时间轴上的一段连续数据,如一 段声音…

dubbogo如何实现路由规则功能

dubbo-go中如何实现路由规则功能 路由规则( routing rule )是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现。在发起一次 RPC 调用前起到过滤目标服务器地址的作用&…

Node第三方包 【node-xlsx】

文章目录 🌟前言🌟node-xlsx🌟安装🌟导出xlsx文件🌟解析xlsx文件🌟另外:其他支持读写Excel的Node.js模块有:🌟直接导出excel文件 🌟写在最后 🌟前…

麒麟信安联合主办 | openEuler Developer Day 2023召开 openEuler全场景走向深入

【中国,上海,2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会、中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办,以“万涓汇流,奔涌向前”为主题&#…

【FTP工具】- Win10下免费的FTP服务器搭建 - FileZilla 的下载、安装、使用

目录 一、概述二、下载、安装2.1 下载2.2 安装 三、FileZilla服务器的使用3.1 连接服务器3.2 配置用户权限 四、在windows访问该Ftp服务器4.1 查看Ftp服务器IP4.2 访问Ftp服务器 一、概述 FileZilla服务器是一个免费的开源FTP和FTPS服务器,是根据GNU通用公共许可证条…

HTB靶机03-Shocker-WP

Shocker scan 2023-03-30 23:22 ┌──(xavier㉿xavier)-[~/Desktop/Inbox] └─$ sudo nmap -sSV -T4 -F 10.10.10.56 Starting Nmap 7.91 ( https://nmap.org ) at 2023-03-30 23:22 HKT Nmap scan report for 10.10.10.56 Host is up (0.40s latency). Not shown: 99 clos…

QT-day(2)-(常用类、信号与槽.....)

题目:编写一个登录功能的界面,在登录框项目中,将登陆按钮发射的tclicked信号,连接到自定义的槽函数中,在槽函数中,判断u界面输入的用户名是否为"admin ,密码是否为"123456如果验证成功&#xff0…

数据结构_时间复杂度/空间复杂度

目录 1. 数据结构在学什么 2. 数据结构的基本概念 3. 算法和算法评价 3.1 算法的基本概念 3.2 算法的特征 3.3 算法效率的度量 3.3.1 时间复杂度 3.3.2 空间复杂度 1. 数据结构在学什么 常言道:学以致用;学习完基本C语言程序,我们希…

AB数对 码蹄集

题目来源:码蹄集 题目描述: 大致思路: 遍历输入的n个整数,将每个数存入哈希表中,key为数值,value为该数出现的次数。 再次遍历这n个整数,对于每个数x,计算出x-C和xC的值&#xff0…

Go语言基础----Go语言简介

【原文链接】Go语言基础----Go语言简介 一、Go语言简介 Go语言,又称Golang,是Google公司的Robert Griesemer,Rob Pike 及 Ken Thompson开发的一种静态强类型、编译型的语言。Go语言语法和C语言接近,但是功能上内存安全&#xff…