数学建模【插值与拟合】

一、插值与拟合简介

在数学建模过程中,通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式,针对此情况,很自然的想法就是,构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这样的问题。

给定一组数据,需要确定满足特定要求的曲线,如果所求曲线通过所给定有限个数据点,这就是插值。有时由于给定的数据存在测量误差,往往具有一定的随机性。因而,要求曲线通过所有数据点不现实也不必要。如果不要求曲线通过所有数据点,而是要求它反映对象整体的变化态势,得到简单实用的近似函数,这就是曲线拟合。

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

由于插值和拟合是一种手段,并无绝对的适用赛题,也并不算是一种模型,故本篇没有适用赛题、模型流程、流程解析部分。后面将重于使用,分别介绍插值和拟合的操作。

二、插值

1.一维插值
①基本概念

已知未知函数在n+1个互不相同的观测点x0<x1<...<xn处的函数值(或观测值):

yi = f(xi) , i = 0, 1, ..., n

寻求一个近似函数(即近似曲线)中φ(x) ,使之满足

φ(xi) = yi, i = 0, 1, ..., n

即求一条近似曲线φ(x),使其通过所有数据点(xi, yi)  i = 0, 1, ..., n

对任意非观测点X(X ≠ xi, i = 0,1, ..., n),要估计该点的函数值f(X),就可以用φ(X)的值作为f(X)的近似估计值,即φ(X) ≈ f(X)。通常称此类建模问题为插值问题,而构造近似函数的方法就称为插值方法。

观测点xi(i = 0, 1, ..., n)称为插值节点,f(x)称为被插函数或原函数,φ(x)为插值函数,φ(xi) = yi称为插值条件,含xi(i = 0, 1, ..., n)的最小区间[a, b](a = min{xi}, b = max{xi})称为插值区间,X称为插值点,φ(X)为被插函数f(x)在X ∈ [a, b] 点处的插值。

这里对于多项式插值,拉格朗日插值、牛顿插值等方法理论部分不做介绍,有兴趣的同学自行查阅。

②函数使用
Ⅰinterp1函数

MATLAB中一维函数interp1的调用格式为

vq = interp1(x0, y0, xq, method, extrapolation)
  • x0:已知的插值节点

  • y0:对应x0的函数值

  • xq:欲求函数值的节点坐标

  • vq:求得的节点xq处的函数值

  • method:指定插值的方法,默认为线性插值。其值常用的有:

'nearest'最近邻插值
'linear'线性插值
'spline'三次样条插值,函数是二次光滑的
'cubic'立方插值,函数是一次光滑的

MATLAB2020A不提倡使用函数interp1,建议使用函数griddedInterpolant。

ⅡgriddedInterpolant函数

函数griddedInterpolant适用于任意维数的插值。

一维插值的调用格式为

F = griddedInterpolant(x, v, method, extrapolation)

计算对应的函数值的使用格式为

vq = F(xq)

n维插值的调用格式为

F = griddedInterpolant(x1, x2,..., xn, v, method, extrapolation)

计算对应的函数值的使用格式为

vq = F(xq1, xq2,..., xqn)
Ⅲcsape三次样条插值函数

三次样条插值还可以使用函数ecsape,csape的返回值是pp形式。求插值点的函数值,调用函数fnval。

pp = csape(x0, y0)使用默认的边界条件,即拉格朗日边界条件。

pp = csape(x0, y0, conds, valconds)中的conds指定插值的边界条件,详细见官网

利用pp结构的返回值,还可以计算返回值函数的导数和积分,命令分别为fnder,fnint,这两个函数的返回值还是pp结构。

调用格式函数功能
pp1 = csape(x0, y0)计算插值函数
pp2 = fnder(pp1)

计算pp1对应函数的导数,返回值pp2也是pp结构

pp3 = fnint(pp1)计算pp1对应函数的积分,返回值pp3也是pp结构
y = fnval(pp1, x)计算pp1对应的函数在x点的取值

2.二维插值
①基本概念

二维插值的基本概念和一维差不多,只不过曲线变成了曲面而已,不做赘述。

②网格数据的插值

已知m×n个节点(xi, yi, zij)(i = 1, 2,.., m; j = 1, 2, ..., n),且x1 <...< xm; y1 < ...< yn。求点(x, y)处的插值z。

Ⅰinterp2函数
z = interp2(x0, y0, z0, x, y, 'method')
  • x0,y0:m维和n维向量,表示插值节点

  • z0:n×m矩阵,表示对应插值节点函数值

  • x,y:一维数组,表示插值点。x与y应是方向不同的向量,即一个是行向量,另一个是列向量

  • z:矩阵,行数为y的维数,列数为x的维数,表示得到的插值

  • method:用法同上面的一维插值

如果是三次样条插值,可以使用函数griddedInterpolant和csape。函数girddedInterpolant前面已经介绍过。

Ⅱcsape函数
pp = csape({x0, y0}, z0, conds, valconds);
z = fnval(pp, {x, y})
  • x0,y0:分别为m维和n维向量

  • z0:m×n矩阵

  • z:矩阵,行数为y的维数,列数为x的维数,表示得到的插值

③散乱数据的插值

已知n个插值节点(xi, yi, zi)(i =1, 2, ..., n),求点(x, y)处的插值z。

Ⅰgriddata函数

函数griddata的调用格式为

ZI = griddata(x, y, z, XI, YI)
  • x,y,z:均为n维向量,指明所给数据点的横坐标、纵坐标和竖坐标

  • XI,YI:给定的网格点的横坐标和纵坐标

  • ZI:网格(XI, YI)处的函数值。XI与YI应是方向不同的向量,即一个是行向量,另一个是列向量

ⅡscatteredInterpolant函数

函数scatteredInterpolant的调用格式为

Fz = scatteredInterpolant(x0, y0, z0, Method, ExtrapolationMethod);
  • 返回值Fz是结构数组,相当于给出了插值函数的表达式

  • x0,y0,z0:分别为已知n个点的x,y,z坐标
  • Method:插值方法
  • ExtrapolationMethod:区域外部节点的外插方法

要计算插值点(x, y)处的值,调用Fz即可

z = Fz(x, y);

三、拟合

1.线性最小二乘法
①解线性方程组拟合参数

要拟合等式中的参数a1, a2, ..., am,把观测值代入等式,得到线性方程组

RA = Y

则A = pinv(R) * Y或简化格式A = R \ Y

②约束线性最小二乘解

在最小二乘意义下解约束线性方程组

即求解数学规划问题

求解上述问题调用函数lsqlin

x = lsqlin(C, d, A, b, Aeq, beq, lb, ub);
③多项式拟合

多项式拟合的函数为polyfit,调用格式为

p = polyfit(x, y, n) % 拟合n次多项式,返回值p是多项式对应的系数,排列次序为从高次幂系数到低次幂系数

计算多项式p在x处的函数值

y = polyval(p, x);
2.fittype和fit函数

函数fit需要和函数fittype配合使用,fittype用于定义拟合的函数类,fit进行函数拟合。fit既可以拟合一元或二元线性函数,也可以拟合一元或二元非线性函数。 这里介绍这两个函数的调用格式。

fittype的调用格式为

aFittype = fittype(libraryModeName) % 利用库模型定义函数类
aFittype = fittype(expression, Name, Value) % 利用字符串定义函数类
aFittype = fittype(linearModeTerm, Name, Value) % 利用基函数的线性组合定义函数类
aFittype = fittype(anonymousFunction, Name, Value) % 利用匿名函数定义函数类

函数fit的调用格式为

​fitobject = fit(x, y, aFittype) % x和y分别为自变量和因变量的观测值列向量,返回值fitobject为拟合函数的信息
fitobject = fit([x, y], z, aFittype) % [x, y]为自变量的观测值的两列矩阵,z为因变量的观测值列向量,这里是拟合二元函数
[fitobject, gof] = fit(x, y, aFittype, Name, Value) % 返回值gof为结构数组,给出了模型的一些检验统计量
3.非线性拟合

MATLAB非线性拟合的主要函数有fit和lsqcurvefit,fit函数使用很方便,但只能拟合一元和二元函数,lsqcurvefit可以拟合任意多个自变量的函数,并且可以约束未知参数的上界和下界,下面用例子讲解。

①fit函数

用下表数据拟合函数

x162674259
x249538582
y14.207739.362217.807711.831032.861816.962233.094111.1737
xy0 = d([1, 2], :)';
z0 = d(3, :)';
g = fittype('a * exp(b * x) + C*y^2', 'dependent' ,'z' , 'independent', {'x', 'y'});
[f, st] = fit(xy0, z0, g, 'StartPoint', rand(1,3));

求得z=6.193e的0.04353x次方+0.3995y²

拟合优度R² = 0.9995,拟合的剩余标准差RMSE = 0.2970,拟合效果很好。

②lsqcurvefit函数

要拟合函数y = f(θ, x),给定x的观测值xdata,y的观测值ydata,求参数向量θ,使得误差平方和最小。

lsqcurvefit函数的调用格式为

theta = lsqcurvefit(fun, theta0, xdata, ydata, lb, ub, options)
  • fun:定义函数f(θ, x)的M函数或匿名函数
  • thata0:θ初始值
  • lb,ub:参数θ的下界和上界
  • options:设置计算过程的一些算法
  • theta:拟合参数θ的值

本篇只是很浅显地介绍了各个函数,每个函数的具体用法和参数设置有兴趣的同学可以到官网查询。如果对其中原理理论部分感兴趣也可以查文献搜索。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【愚公系列】2024年02月 大数据教学课程 017-Hadoop环境配置

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

FPGA 与 数字电路的关系 - 这篇文章 将 持续 更新 :)

先说几个逻辑&#xff1a;&#xff08;强调一下在这篇文章 输入路数 只有 1个或2个&#xff0c;输出只有1个&#xff0c;N个输入M个输出以后再说&#xff09; 看下面的几个图&#xff1a; 图一&#xff08; 忘了 这是 啥门&#xff0c;不是门吧 &#xff1a;&#xff09;也就…

【好书推荐-第五期】《Java开发坑点解析:从根因分析到最佳实践》(异步图书出品)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

I/O流(C++)

输入输出操作是程序中必不可少的操作&#xff0c;通过输入输出可以完成程序和外界的交互。 C语言支持两种I/O操作&#xff1a; &#xff08;1&#xff09;从C语言继承来的I/O函数输入输出语句&#xff1a;scanf()、printf()函数 &#xff08;2&#xff09;面向对象的I/O流类…

动画法则与动画曲线解析

先介绍一些和代码关系不大的动画常识 挤压与拉伸(Squeeze and stretch) 当有力作用到物体身上时,物体将会产生一定的形变,比如你在拍球时,球落地后会被挤压,弹起时会产生拉伸,对于具体的挤压与拉伸的强度,与物体的硬度和用力的大小有关。做动画要遵循运动规律让动画更…

一周学会Django5 Python Web开发-Http请求HttpRequest请求类

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

JavaWeb 自己给服务器安装SQL Server数据库遇到的坑

之前买的虚拟主机免费送了一个SQL Server数据库&#xff0c;由于服务器提供商今年下架我用的那款虚拟主机产品&#xff0c;所以数据库也被收回了。我买了阿里云云服务器&#xff0c;但是没有数据库&#xff0c;于是自己装了一个SQL Server数据库&#xff0c;总结一下遇到的坑。…

【设计模式】5种创建型模式详解

创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性。 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。不常用的有:原型模式。一、单例模式 1.1 单例模式介绍 1 ) 定义 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模…

Temu、亚马逊店铺如何快速得到好评?自养号测评下单的秘籍及必备条件。

Temu、亚马逊店铺如何快速得到好评?在这个竞争激烈的电商平台上&#xff0c;好评是店铺吸引顾客、建立良好声誉的关键。快速积累好评不仅能够提高商品的曝光度&#xff0c;也有助于吸引更多潜在顾客的关注。 然而&#xff0c;亚马逊不同于国内电商&#xff0c;对于操纵评论、…

数据清洗处理实战:将储存为股票代码的列表文件转换为pythoh列表

一、读取市场所有股票代码,并将处理过的股票代码写入文件&#xff0c;供后续使用 # 读取市场所有股票代码&#xff0c;并存入txt文件symbols xtdata.get_stock_list_in_sector(沪深A股)with open(symbols.txt,w) as f:f.write(str(symbols))由于python不能直接将列表写入txt文…

低代码流程加签功能深度解析:提升审批流程效率与准确性的利器

在流程审批过程中&#xff0c;流程加签通常是为了证明某个事项已经得到了确认或批准&#xff0c;或者为了证明某个文件已经经过了相关人员的审核或批准&#xff0c;或者除当前固定审批人外还需要额外的审批意见&#xff0c;需要临时添加其他审批人参与审批。通过流程加签配置&a…

编程的基础:理解时间和空间复杂度

编程的基础&#xff1a;理解时间和空间复杂度 时间复杂度空间复杂度示例常数时间复杂度 O(1)线性时间复杂度 O(n)线性对数时间复杂度 O(n log n)二次时间复杂度 O(n^2)指数时间复杂度 O(2^n) 空间复杂度示例常数空间复杂度 O(1)线性空间复杂度 O(n)线性对数空间复杂度 O(log n)…

leetcode hot100 买卖股票最佳时机3

本题中&#xff0c;依旧可以采用动态规划来进行解决&#xff0c;之前的两个题我们都是用二维数组dp[i][2]来表示的&#xff0c;其中i表示第i天&#xff0c;2表示长度为2&#xff0c;其中0表示不持有&#xff0c;1表示持有。 本题中&#xff0c;说至多完成两笔交易&#xff0c;也…

JAVA集合进阶(Set、Map集合)

一、Set系列集合 1.1 认识Set集合的特点 Set集合是属于Collection体系下的另一个分支&#xff0c;它的特点如下图所示 下面我们用代码简单演示一下&#xff0c;每一种Set集合的特点。 //Set<Integer> set new HashSet<>(); //无序、无索引、不重复 //Set<…

docker安装mongodb

1.使用docker安装mongo 1.1下载MongoDB镜像 docker pull mongo:4.4 1.2运行MongoDB容器 docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth 2.创建用户 2.1 登录mongo容器&#xff0c;并进入到【admin】数据库 dock…

gnss 自然灾害监测预警系统是什么

【TH-WY1】GNSS自然灾害监测预警系统是一种基于全球导航卫星系统&#xff08;GNSS&#xff09;技术的自然灾害监测和预警系统。它利用GNSS的高精度定位技术&#xff0c;通过在地表布置GNSS接收设备&#xff0c;实时监测地表形变、位移、沉降等参数&#xff0c;从而实现对自然灾…

蓝桥杯-答疑

原题链接&#xff1a;用户登录 答疑 题目描述 有 n 位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。 老师可以安排答疑的顺序&#xff0c;同学们要依次进入老师办公室答疑。一位同学答疑的过程如下 1.首先进入办公室&#xff0c;编号为 的同学需要 s&#xff0c;…

【智慧零售】门店管理设备解决方案,为企业数字化运营升级赋能

2023年我国零售总额超47万亿元&#xff0c;广阔的市场提供了更多机遇&#xff0c;同时随着日趋激烈的竞争&#xff0c;企业也正面临着一些挑战&#xff1a;如何才能有效提升门店生产效率&#xff1f;降低门店运营成本&#xff1f;提高市场竞争力&#xff1f; 零售企业认识到通…

视频和音频使用ffmpeg进行合并

1.下载ffmpeg 官网地址&#xff1a;https://ffmpeg.org/download.html 2.配置环境变量 此电脑右键点击 属性 - 高级系统配置 -高级 -环境变量 - 系统变量 path 新增 文件的bin路径 3.验证配置成功 ffmpeg -version 返回版本信息说明配置成功4.执行合并 ffmpeg -i 武家坡20…

FullCalendar日历组件:进行任务增删改,参考gitee例子修改

效果 参考路径 zxj/FullCalendar开发示例 - 码云 - 开源中国 (gitee.com) 代码 主页面&#xff1a;codeset.php <?php ob_start(); include(includes/session.inc); ?> <!DOCTYPE html> <html><head><title>日程管理</title><met…
最新文章