数学建模【插值与拟合】

news2025/1/13 7:39:51

一、插值与拟合简介

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

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

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

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

二、插值

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.coloradmin.cn/o/1471104.html

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

相关文章

[算法沉淀记录] 排序算法 —— 选择排序

排序算法 —— 选择排序 基本概念 选择排序是一种简单的排序算法&#xff0c;它的工作原理是每次从待排序的列表中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其与列表中的第一个位置交换&#xff0c;然后继续对剩余的元素进行排序&#xff0c;直到整个列表…

数据结构2月21日

双向链表: func函数&#xff1a; #include <stdio.h> #include <stdlib.h> …

opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、opengles3.0 绘制图元介绍二、绘图图元 API 介绍1. glDrawArrays()1.1 glDrawArrays()函数原型1.2 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN 三者的区别1.3 使用GL_TRIANGLES, G…

微信小程序 wxs内联与外联的写法

内联写法 <!-- 内联wxs --> <view>大写字母{{m1.toUpper("xmly")}}</view> <wxs module"m1">module.exports.toUpperfunction(str){return str.toUpperCase()} </wxs> 外联写法 新建一个wxs文件 写一个函数&#xff0c;将…

【k8s】-- 查询 pod 磁盘容量

命令&#xff1a;kubectl get pvc -n 你的namespace --context上下文命名 -o wide 举例&#xff1a;kubectl get pvc -n my-bigdata --contextprod-6 -o wide

HarmonyOS服务卡片开发指导(Stage模型)概述

服务卡片概述 服务卡片&#xff08;以下简称“卡片”&#xff09;是一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到卡片&#xff0c;以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用&#xff08;当前卡片使用方只支持系统应用&#xff0c;如桌…

多输入分类|WOA-CNN|鲸鱼算法优化的卷积神经网络分类预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整程序数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

免编程经验,搭建宠物店小程序轻松实现

在如今的互联网时代&#xff0c;小程序商城已成为各行业推广和销售的热门方式。对于花店来说&#xff0c;搭建一个自己的小程序商城不仅可以提升品牌形象&#xff0c;还可以方便顾客在线选购花卉产品。下面就来教大家如何轻松搭建一个花店小程序商城&#xff0c;并通过引流获得…

WiFi又演进了,这次是WiFi 7

现在很多笔记本laptop、电视TV、手机Phone,甚至车机IVI都有了WiFi和蓝牙BT的接入功能。 不管WiFi、蓝牙BlueTooth、NBIoT、ZigBee等等无线的技术、无线通信模块的技术,其本质都是在无线频谱上以某种频段某种调制方式传输某个协议的数据进行通信,所以通信标准的演进就决定着…

webGL开发的软件项目类型

WebGL&#xff08;Web Graphics Library&#xff09;作为一种强大的JavaScript API&#xff0c;能够在Web浏览器中实现2D和3D图形的渲染&#xff0c;适用于开发多种类型的软件项目。以下是WebGL可以开发的一些软件项目类型&#xff0c;希望对大家有所帮助。北京木奇移动技术有限…

QT GUI编程常用控件学习

1 GUI编程应该学什么 2 QT常用模块结构 QtCore: 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用 QtGui: 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类 QtWidgets: 包含了一些列创建桌面应用的UI元素…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

【大数据】Flink SQL 语法篇(四):Group 聚合、Over 聚合

Flink SQL 语法篇&#xff08;四&#xff09;&#xff1a;Group 聚合、Over 聚合 1.Group 聚合1.1 基础概念1.2 窗口聚合和 Group 聚合1.3 SQL 语义1.4 Group 聚合支持 Grouping sets、Rollup、Cube 2.Over 聚合2.1 时间区间聚合2.2 行数聚合 1.Group 聚合 1.1 基础概念 Grou…

Java学习笔记------多态

什么是多态 同类型的对象&#xff0c;表现出的不同形态 多态的表现形式 父类类型 对象名称子类对象&#xff1b; 多态的前提 有继承关系 有父类引用指向子类对象 有方法重写 多态调用成员的特点 变量调用&#xff1a;编译看左边&#xff0c;运行也看左边 方法调用&am…

力扣LCR 140. 训练计划 II(顺序遍历,快慢指针)

Problem: LCR 140. 训练计划 II 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;顺序遍历 欲返回倒数第cnt个节点则需要顺序遍历到len-cnt&#xff08;其中len为链表的长度&#xff09; 思路2&#xff1a;快慢指针 让一个快指针fast指向cnt 1个节点&#x…

Spring ReflectionUtils 反射工具介绍和使用

一、ReflectionUtils 在 Java 中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时动态地检查类、获取类的信息、调用类的方法、访问或修改类的属性等。Java 的反射机制提供了一组类和接口&#xff0c;位于 java.lang.reflect…

python爬取网站内容写入xls

目标 现需要对下面网站资源进行爬取&#xff0c;文学人物-名人明星网 获取人物名字获取人物头像获取人物简介 资源获取 通过requests库&#xff0c;我们可以让 Python 程序向浏览器一样向 Web 服务器发起请求&#xff0c;并接收服务器返回的响应&#xff0c;从响应中我们就…

Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…

【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术

文生视频 Diffusion Transformer&#xff1a;Sora 核心架构、Stable Diffusion 3 同源技术 提出背景输入输出生成流程变换器的引入Diffusion Transformer (DiT)架构Diffusion Transformer (DiT)总结 OpenAI Sora 设计思路阶段1: 数据准备和预处理阶段2: 架构设计阶段3: 输入数据…

sql-labs第46关(order by盲注脚本)

一、环境 网上有自己找 二、解释 order by 注入我们看他的true和false来进行注入出来 二、实操 让我们用sort 看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username&#xff1a; password&#xff1a; 可以看到顺序是不…