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

news2025/1/19 22:05:48

目录

一、前言

1、引例

2、拟合定义

3、拟合与插值的关系

二、拟合

1、线性最小二乘法求解

①思路

②解法

2、MATLAB对线性最小二乘拟合的实现

①函数说明

②求解例题

3、MATLAB实现非线性曲线拟合

①lsqcurvefit函数

②代码求解

4、MATLAB实现非线性最小二乘拟合

①lsqnonlin函数

②代码求解


一、前言

1、引例

        话不多说,我们还是老规矩,上例题!

        伍老师当了这么多篇文章的主角,今天的主角终于成为了伍老师的闺蜜汪老师。汪老师的零花钱一般在月初发,但是,汪老师一不小心多网购了一点,四月的最后一周只剩下了300块钱。已知这一周的前四天开销如下:

4月24号:踌躇满志的想要去省钱,当天花销共计35块

4月25号:感觉最后一周的第一天太克制自己了,多花一点,当天花销共计45块

4月26号:陪男朋友出去玩,多点了一杯奶茶,当天花销共计48块、

4月27号:突然发现前两天花的钱有点多了,克制一下,当天花销共计38块

那么,请你预测一下汪老师的花销函数,并且估计,300块汪老师能否撑过这一周?

2、拟合定义

        曲线拟合问题是指:已知平面上n个点(x_{i},y_{i}),i=1,2,3……n,x_{i}互不相同。寻求函数f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得很好。比如说我们高中学习过电阻与温度相关,我们测量某几个温度下的电阻,做出一条线,这就是我们拟合出来的函数图像:

        曲线拟合一般需要解决如下两个问题:

        ①线型的选择;

        ②线型中参数的计算

        其中,问题①是拟合问题的关键与难点,线性拟合中参数的计算可以使用最小二乘法,二非线性拟合参数的计算则要应用GN迭代法。

3、拟合与插值的关系

        相同点:给定一批数据点,需确定满足特定要求的曲线或曲面

        不同点:若要求所求曲线(面)通过所给所有数据点,就是插值问题;不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合。像上篇文章中出现过Runge现象,当不小于7次时,波动十分显著,所以我们需要用拟合的方法去构建相关的函数。小编借用龙门飞甲里的几句台词,来说明拟合的作用:

        “拟合算什么东西?”

        “你问我拟合算什么东西,现在我就来告诉你。插值算不了的值由我拟合来做,插值画不了的图我画,插值写不了的代码我写。一句话,拟合建不了的模我要建。拟合建不了的模我更要建!这就是西厂!”

        函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者在数学方法上是完全不同的。

二、拟合

1、线性最小二乘法求解

①思路

第一步:先选定一组函数 r_{1}(x)r_{2}(x),……,r_{m}(x),  m<n, 令

f(x)=a_{1}r_{1}(x)+a_{2}r_{2}(x)+\cdot \cdot \cdot +a_{m}r_{m}(x)           ( 1 )

其中a_{1},a_{2}, …,a_{m} 为待定系数。

        第二步:  确定a_{1}a_{2}, …,a_{m} 的准则(最小二乘准则): 使n个点(x_{i},y_{i}) 与曲线 y=f(x) 的距离\delta _{i}的平方和最小

        问题归结为,求 a_{1}a_{2},……,a_{m},使J(a_{1},a_{2},\cdot \cdot \cdot ,a_{m})最小

②解法

        我们把方程个数大于未知量个数的方程组称为超定方程组

        我们可以把上述超定方程组简写为矩阵乘法形式:

        超定方程组一般是不存在解的矛盾方程组,所以我们定义如果有向量a使得式子(4)达到最小, 则称a为上述超定方程组的最小二乘解。

\sum_{i=1}^{n}(r_{i1}a_{1}+ r_{i2}a_{2}+\cdot \cdot \cdot r_{im}a_{m}-y_{i})^{2} \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, (4)

         这里补充一个定理:当R^{T}R可逆时,超定方程组(3)存在最小二乘解,且即为方程组

2、MATLAB对线性最小二乘拟合的实现

①函数说明

调用函数:

a=polyfit(x,y,m)

参数说明:

a:输出拟合多项式系数 a=[a1, …,am , am+1] (数组))

x、y:输入同长度的数组x,y,为已知的点坐标

m:拟合多项式次数

作用:对多项式f(x)=a_{1}x^{m}+a_{2}x^{m-1}+\cdot \cdot \cdot \cdot a_{m}x+a_{m+1}拟合

额外说明:

        对超定方程组,可以用a=R\y得到最小二乘意义下的解。

        多项式在x处的值y可用y=polyval(a,x)命令计算。

②求解例题

如果使用一次函数拟合,则代码为:

x=[1,2,3,4];
y=[35,45,48,38];
A=polyfit(x,y,1)
x1=1:1:7
z=polyval(A,x1)
plot(x,y,'o',x1,z,'r') 

求出的结果为:

        所以预计最后三天汪老师会花费44.5+45.7+46.9=137.1元,算上前面四天的消费,一共303.1元,故汪老师三百块撑不过这一周,需要找伍老师接三块一毛钱。

3、MATLAB实现非线性曲线拟合

①lsqcurvefit函数

        已知输入数据点和输出数据点,即x=(xdata1,xdata2,……,xdatan),y=(ydata1,ydata2,……ydatan),并且还知道输入数据点与输出数据点的关系为ydata=F(x,xdata),MATLAB里有lsqcurvefit函数能够对曲线进行拟合,求得x使得下式成立:

函数输出格式:

        x = lsqcurvefit (‘fun’,x0,xdata,ydata);

        x =lsqcurvefit(‘fun’,x0,xdata,ydata,options);

        x=lsqcurvefit(‘fun’,x0,xdata,ydata,options,’grad’);

参数说明:

        其中x0代表初始解向量,option代表优化方式,xdata与ydata满足ydata=F(x,xdata),fun代表一个事先建立的定义函数F(x,xdata) 的m文件, 自变量为x和xdata。

②代码求解

        加入我们知道汪老师最后一周的花销函数为F(x)=-acos(wx)+kx+b,请用lsqcurvefit函数拟合,并且求出参数a、w、k、b。

        我们先定义一个花销函数expense.m,内容如下:

function F=expense(x,xdata);
    F=-x(1)*cos(x(2)*xdata)+x(3)*xdata+x(4)
    % x(1)=a; x(2)=w,x(3)=k,x(4)=b;

        再输入相关命令:

xdata=[1,2,3,4];
ydata=[35,45,48,38];
x0=[0.1,0.1,0.1,0.1];
  x=lsqcurvefit('expense',x0,xdata,ydata)
  xnew=1:1:7;
  F=expense(x,xnew)
  

我们就能算出,a、w、k、b四个参数的值以及汪老师这一周每天的花费,如下:

        再计算一下这一周的后三天汪老师会花费48.07+48.43+46.6=143.1,而按照这个模型这一周共计花费309.1元,看来300是不够的,还需要多找伍老师借9.1块钱。

4、MATLAB实现非线性最小二乘拟合

①lsqnonlin函数

        已知输入数据点和输出数据点,即x=(xdata1,xdata2,……,xdatan),y=(ydata1,ydata2,……ydatan),用以求含参量x的向量值函数f(x),使得下式的值最小:

        其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai。

函数格式:

        x=lsqnonlin(‘fun’,x0)      

        x=lsqnonlin(‘fun’,x0,options)      

        x= lsqnonlin('fun’,x0,options‘grad’)

参数说明:

        其中x0代表初始解向量,option代表优化方式,fun代表一个事先建立的定义函数F(x) 的m文件, 自变量为x。

②代码求解

        仍然以刚刚那道题为例,我们先定义一个花销函数expense.m,内容如下:

function F=expense(x);
xdata=[1,2,3,4];
ydata=[35,45,48,38];
    F=-x(1)*cos(x(2)*xdata)+x(3)*xdata+x(4)
    % x(1)=a; x(2)=w,x(3)=k,x(4)=b;

        再输入代码:

x0=[0.1,0.1,0.1,0.1];
  x=lsqnonlin('expense',x0)
  xnew=1:1:7;
  F=expense(x)
  

        就能算出各个参数的值!结果与非线性曲线拟合的结果一致,这里就不放相应的结果啦!

        好的,本期的数学建模的课程就到这里啦,不知道小编的文章对各位观众老爷们有没有帮助呢?麻烦大家给小编点一个免费的小心心好吗?

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

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

相关文章

华为2023暑期笔试(2-2)——最近最少使用(LRU, Least recently used)缓存算法

目录 题目内容解答要求&#xff08;解答要求限制了只能使用LRU&#xff09;输入描述样例思路代码 题目内容 你是一名网络工程师&#xff0c;你正在为一家云计算公司开发一个虚拟机管理系统。你的系统需要为每个虚拟机分配一个唯一的ID&#xff0c;用来标识和通信。为了实现这个…

C++基础demo(C++入门基础案例)

C入门基础案例学习与了解 demo16 计算年份是否为闰年&#xff08;各种运算符结合&#xff09;demo17 打印ASCII码表demo18 求完数demo19 密码验证&#xff08;if……else&#xff09;demo20 图书管理&#xff08;if…else if…else&#xff09;demo21 信号灯&#xff08;和--&a…

python中使用ctypes库调用使用MMDeploy C++ SDK编译得到的dll文件时,出现WinError126的解决方法

之前&#xff0c;通过以下两篇文章&#xff0c;着重介绍了&#xff0c;使用openMMLab开发的MMDeploy库对MMxx系列仓库训练得到的权重pth转换得到的onnx&#xff0c;并分别使用python SDK和C SDK进行调用的详细步骤&#xff1a; 使用MMDeploy&#xff08;预编译包&#xff09;转…

Enterprise:如何在 Elastic 企业搜索引擎中添加对更多语言的支持

作者&#xff1a;Ioana-Alina Tagirta Elastic App Search 中的引擎&#xff08;engines&#xff09;使你能够索引文档并提供开箱即用的可调搜索功能。 默认情况下&#xff0c;引擎支持预定义的语言列表。 如果你的语言不在该列表中&#xff0c;此博客将说明如何添加对其他语言…

RabbitMQ笔记

一、MQ与RabbitMQ概述 1. MQ简述 MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基础数据结构中 “先进先出” 的一种数据结构&#xff0c;也是在消息的传输过程中保存消息的容器&#xff08;中间件&#xff09;&#xff0c;多用于分布式系统之间进行通信。 …

[Pandas] 设置DataFrame的index索引起始值为1

导入数据 import pandas as pddf pd.DataFrame([[liver,E,89,21,24,64],[Arry,C,36,37,37,57],[Ack,A,57,60,18,84],[Eorge,C,93,96,71,78],[Oah,D,65,49,61,86]], columns [name,team,Q1,Q2,Q3,Q4]) df 上述DataFrame中的index索引列默认是从0开始的&#xff0c;那么我们…

【Spark】Spark是什么?能干什么?有什么特点?

一、什么是Spark 官网&#xff1a;http://spark.apache.org Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. Spark是一种快速、通用、可扩展的大数据分析引擎&#xf…

MATLAB连续LTI系统的时域分析(十)

目录 1、实验目的&#xff1a; 2、实验内容&#xff1a; 1、实验目的&#xff1a; 1&#xff09;掌握利用MATLAB对系统进行时域分析的方法&#xff1b; 2&#xff09;掌握连续时间系统零输入响应的求解方法&#xff1b; 3&#xff09;掌握连续时间系统零状态响应、冲激响应和…

AD9739配置解析与数据输出指南

1 概述 本文用于AD9737芯片的配置使用情况&#xff0c;以及数据输出的格式说明情况&#xff0c;数据速率的计算情况等。 AD9739是ADI公司的一款14BIT&#xff0c;可达2.5GSPS采样率的DAC芯片。 2 AD9739的性能 支持的输入数据速率&#xff1a;1.6GSPS TO 2.5GSPS. industry lea…

基于3D渲染和基于虚拟/增强现实的IIoT原理的数字孪生平台的方案论文阅读笔记

基于3D渲染和基于虚拟/增强现实的IIoT原理的数字孪生平台的方案论文阅读笔记 论文原文链接&#xff1a;https://ieeexplore.ieee.org/abstract/document/9039804 本笔记对部分要点进行了翻译和批注&#xff0c;原文和翻译可参考链接阅读&#xff0c;此处不进行完整翻译。 论文…

【服务网格】Service Mesh 是什么?为我们解决了什么问题?

文章目录 背景一、Service Mesh 介绍Service Mesh的定义Service Mesh 诞生 二、Service Mesh 解决的问题三、Service Mesh 的原理四、Service Mesh具体是怎么实现的&#xff1f;Istio是什么&#xff1f;istio架构和主要功能Istio 1.5.1 性能总结Istio与Kubernetesistio的实战案…

四、MyBatis获取参数值的两种方式(重点)

文章目录 四、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;4.1 单个字面量类型的参数4.2 多个字面量类型的参数4.3 map集合类型的参数4.4 实体类类型的参数4.5 使用Param标识参数 四、MyBatis获取参数值的两种方式&#xff08;重点&#xff09; MyBatis获取参数值…

IP-GUARD屏幕记录能实现平时不记录,特定操作触发记录吗?

支持触发性屏幕记录。部分策略有选项“记录屏幕”,勾选后,策略触发时,会自动记录客户端当时的屏幕情况,记录次数和间隔可通过配置修改。 所有包含了记录屏幕的策略有: 应用程序、上网浏览、流量控制、网络控制、邮件控制、IM传送控制、上传控制、文档控制、打印控制、敏感…

深浅拷贝,类型检测及继承面试题

01 对象的深/浅拷贝 1.1 变量的存储 基本类型&#xff1a;基本类型的值存在栈内存中 引用类型&#xff1a; 引用类型的地址存储在栈内存中&#xff0c;他的值存储在堆内存中&#xff0c;通过指针(地址)连接 1.2 变量拷贝 基本类型&#xff1a;基本类型拷贝的是值 引用类型…

达梦数据库中,如何设置表的访问控制权限?

在工作中&#xff0c;大家都会遇到这样的场景&#xff0c;出于对数据库访问安全的考虑&#xff0c;对于某些用户我们不想让他们看到全库的表&#xff0c;只想给他们特定表的访问权限。那么在DM数据库中我们该如何去配置相应的权限呢&#xff1f; 我们下面来进行详细解析。 我们…

buuctf6

目录 [ACTF2020 新生赛]BackupFile [RoarCTF 2019]Easy Calc 利用PHP的字符串解析特性Bypass: http走私攻击 来首歌吧 荷兰宽带数据泄露​编辑 面具下的flag [ACTF2020 新生赛]BackupFile 1.打开环境 查看源代码得不到任何想要的信息&#xff0c;使用目录扫描来得到我们…

关于秒杀系统的一系列问题

阻塞队列怎么么实现&#xff1f;超卖问题&#xff1f;整体怎么实现&#xff1f; 5 设计一个秒杀系统 特点&#xff1a;高并发&#xff0c;请求量远大于库存量&#xff0c;只有少数能成功&#xff1b;逻辑比较简单&#xff0c;下单减库存&#xff1b; 设计理念&#xff1a;**限…

ESP8266基于Lua开发点灯示例

ESP8266基于Lua开发点灯示例 ✨基于ESPlorer IDE&#xff1a;https://github.com/4refr0nt/ESPlorer/releases&#x1f527;固件烧录工具&#xff1a;NodeMCU-PyFlasher&#x1f33f;esp8266烧录工具下载&#xff1a;https://github.com/marcelstoer/nodemcu-pyflasher/release…

LabVIEW CompactRIO 开发指南2 CompactRIO软件架构

第一章 CompactRIO软件架构 几乎所有的CompactRIO系统都至少有三个顶层VIs在三个不同的目标上异步执行:FPGA、实时操作系统(RTOS)和主机PC。如果开始软件开发时没有某种架构或流程图可供参考&#xff0c;那么可能会发现跟踪所有软件组件和通信路径是具有挑战性的。拥有一个在…

CentOS7上使用yum搭建LNMP架构并实现wordpress博客实战

前言 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家&#x1f609;&#x1f609; &#x1f495; 座右铭&#xff1a; 先努力成长自己&#xff0c;再帮助更多的人 &#xff0c…