数学建模笔记(三):拟合算法

news2024/11/13 22:09:15

        前面介绍的插值方法,我们可以发现他的特点在于最终得到的曲线一定要经过已经给出的样本点的,而这次要介绍的拟合方法的区别在于,拟合不要求曲线一定要经过所有的样本点,只要这个曲线与样本点之间的误差足够小,距离足够近,这个曲线拟合的效果就足够好,可以使用。

两种方法的对比及引入

        下面是一组数据的分布图,大家可以先观察一下数据的特点。

        假如我们想用上次所说的插值的方法来进行补全数据,我们可以使用pchip函数进行三次埃尔米特插值,结果如下。

        会发现使用插值法的曲线其实还是比较复杂的,但是如果细心的朋友可能会发现,其实整体的数据的趋势是呈现一个线性上升的趋势的,我们其实可以不需要那么精确的将每一个数据点都覆盖到,使用一个线性的一次函数就可以比较好的对数据的趋势进行一个拟合。

        那么现在接入我们想使用一个一次函数y=kx+b来对数据点进行拟合,我们希望得到最佳的kb,使得样本点和曲线之间的整体距离最为接近 。

最小二乘法寻找最优参数

        因此我们采用最小二乘法来获得最优的k和b,最小二乘法的核心公式是这样。

        稍微解释一下,arg代表的意思是寻找参数,没有什么大的影响,y_{i}是原来的数据点的纵坐标,\hat{y_{i}}是拟合曲线上的点的纵坐标。 

        具体得到最优参数的推导过程如下:

        这里稍微对推导过程做一下解释。首先我们将\hat{y_{i}}用原来的公式代替,将这些项展开之后,对完整的公式进行求偏导。对k和b分别求偏导数,并将它们设为零。这是基于多元微积分中的极值原理,即在极值点处,所有偏导数都为零。最终通过一系列的化简操作之后就可以得到k和b的表达式。下面就是最终画出来的结果。

下面是最小二乘法的Matlab代码

x = [4.9, 5.2, 2.4, 3.8, 3.6, 5.6, 6.9, 3.5, 3.4, 2.9, 4.2, 6.1, 5.5, 6.6, 2.7, 3.3, 5.9, 6, 5.1];
y = [8.4, 11.7, 4.2, 6.1, 7.9, 10.2, 13.2, 6.6, 6, 4.7, 8.8, 12, 10.3, 13.3, 4.6, 6.7, 10.8, 11.5, 9.9];
n=size(x,2);%获取数据的长度
plot(x,y,"o");
xlabel("横坐标的值");
ylabel("纵坐标的值"); %这一部分是用来现将原来的数据点画出来的操作
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.^2)-sum(x).^2);
b=(sum(x.^2)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.^2)-sum(x).^2); %求解斜率和截距
hold on  %hold on用来表示下面的画图继续在原来的图上面进行
grid on  %grid on表示显示网格线
f=@(x) k*x+b;   %生成函数,@(x)代表这个函数是以x作为变量
fplot(f,[0,7]); %fplot是用来画函数图像的函数,后面是自变量的范围

误差估计

对拟合的效果进行评估的时候,我们使用R^{2}来对拟合的效果进行估计。下面介绍一下三个平方和指标,分别是总体平方和(SST),误差平方和(SSE),回归平方和(SSR),R^{2}是SSR与SST之比。三个的具体内容以及相互之间的关系如下:

下面是误差估计的代码

y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2);
SSE=sum((y_hat-y).^2);
SST=sum((y-mean(y)).^2);  %mean函数用来求均值
SST-SSR-SSE
R2=SSR/SST;
disp(R2);

 使用MatLab进行拟合

       我们知道,仅仅使用线性函数的拟合是肯定不够的,对一些规律更加复杂的数据,我们可能需要采用该更加复杂的函数(比如指数函数,高次函数)拟合。Matlab中为我们提供了可以直接帮助我们采用合适的拟合方式的工具,下面来介绍一下。

首先在这里找到画红圈的位置。

开始的界面会呈现下面的这种样子

 找到画红圈的位置,将x和y设置成为你文件中相应的x和y的数据

设置好了之后,matlab会自动识别数据的特点并且选择最合适的拟合方法进行拟合。这里采用的是多项式一次拟合(Polynomial,Degree是一次的意思)

左边的这个部分代表的是各项评估误差的指标,其中就包括我们之前所提到的R^{2}和SSE,可以看到这里的R^{2}和1的距离很接近,拟合效果比较好,RMSE也是一个评估拟合精度的指标,大家可以自行了解。

也就是说,拟合工作可以完全由MatLab来帮我们进行实现,MatLab的功能还是太强大了!!

这就是关于拟合的一些介绍,希望对大家有帮助~~ 

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

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

相关文章

unity AssetBundle 使用_什么是AssetBundle_导入必要的插件_创建AssetBundles_AB包资源下载_大文件下载

一、什么是AssetBundle? 定义AssetBundle。 AssetBundle 是一个存档文件,包含可在运行时由 Unity 加载的特定于平台的非代码资源(比如模型、纹理、预制件、音频剪辑甚至整个场景)。AssetBundle 可以表示彼此之间的依赖关系&…

PD取电快充协议方案

PD快充协议是通过调整电压和电流来提供不同的充电功率。它采用了一种基于USB-C端口的通信协议,实现了充电器于设备之间的信息交换。在充电过程中设备会向充电器发出请求,要求提供不同的电压和电流,充电器接收到请求后,会根据设备的…

数据本地化软件架构-SAAS本地化未来之窗行业应用跨平台架构

一、未来之窗行业应用跨平台架构 未来之窗跨平台架构采用Hybird(混合模式移动应用)是一种结合了原生应用(Native App)和网页应用(Web App)特点的移动应用开发模式。 二、特点 2.1. 开发成本相对较低 - 与…

C++码表之Unicode

今日诗词: 折花逢驿使,寄与陇头人。 江南无所有,聊赠一枝春。 ——《赠范晔诗》【南北朝】陆凯 引言: 上一期我们说到了ASCII码表,这是一种现如今不是那么通用的机制,随着计算机的普及,越来越…

电脑ip地址为什么会自己变更?电脑ip怎么改

在当今这个高度依赖互联网的时代,IP地址作为网络设备的身份标识,其稳定性和可管理性对于网络通信的顺畅至关重要。然而,许多用户可能会遇到电脑IP地址自动变更的情况,这不仅可能影响到网络连接的稳定性,还可能给远程访…

怎么使用win10录屏快捷键 ?分享三款录屏工具

录屏软件在我们日常生活中越来越常见,无论是做教程、记录游戏精彩瞬间还是进行远程教学,一个好的录屏软件都能让我们的生活变得更加便捷。不少人也会选怎win10自带的录屏,使用WIN10 录屏快捷键【winG】,就可以唤出录屏工具&#x…

【Node】【1】node和nvm安装

安装nvm、node、npm 安装node 18 ,最简单的办法是使用nvm,就不用手动安装了,那么就得先安装nvm。 NVM 是Node Version Manager,用于管理 Node.js 版本。你设备上的不同项目可能使用不同版本的 Node.js。通过 nvm,用户…

Redis | 非关系型数据库Redis的初步认识

本节内容相对理论,着重看基础通用命令这一节 Redis 非关 kv型{字典} 概念应用ubuntu安装配置 windows添加密码 可能问题【ubuntu】远程连接 基础通用命令 ⭐ 概念 特点: 1、开源的,使用C编写,基于内存且支持持久化 2、没有表 支持…

ssrf例题分析

我们第一步先在ubuntu中解压web-ssrfme.zip,更新镜像后重启容器。 我们可以看到代码中成功拉取到ssrfme镜像 ig(preg_match(/file\:\/\/|dict\:\/\/.|\.\.\/|127.0.0.1|localhost/is,$url,$match)) 使用端口访问文件&…

【Linux系列】SH 与 BASH 的区别:深入解析与使用案例

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Leetcode JAVA刷刷站(93)复原IP地址

一、题目概述 二、思路方向 为了解决这个问题,我们可以使用回溯算法。回溯算法在这里非常适用,因为我们需要尝试在字符串中的不同位置插入点(.)来分割出可能的IP地址段,并且需要验证每个段是否满足条件(即…

如何使用ssm实现铁岭河医院医患管理系统+vue

TOC ssm077铁岭河医院医患管理系统vue 系统概述 进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文…

从web.xml动态读取sunspringmvc.xml文件

文章目录 1.问题分析1.SunWebApplicationContext.java 中sunspringmvc.xml是写死的2.但是web.xml已经配置了init-param,所以应该是可以读取的 2.具体实现1.SunDispatcherServlet.java 得到ServletConfig传递给Spring容器完成初始化2.SunWebApplicationContext.java …

C_03 函数学习

函数 优点: 降低代码耦合度降低代码冗余度提高代码复用率提高代码可读性 思想: 封装【包装】 声明: 语法: extern 函数名(形参列表);// 注意:此时 形参列表中变量名可以忽略不写;定义&#xff1…

2024.8.26

一、对于第三模态加入对于模型性能的影响 yes/no other num 尝试通过 1、删去第一次反向传播时第三模态的梯度更新 (1)第三次反向传播会再进行一次更新 (2)阻止模型频繁的学习训练样本 2、取消第三模态共享头部更新时的权重修正&…

Vue.js实战教程:如何一步步构建HSK在线学习平台

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

3ds Max 2025新增功能、安装教程及下载

3ds Max 2025 引入了一些新的功能和改进,提升了建模、动画和渲染的效率: 增强的建模工具:增加了新的多边形建模和修改器工具,支持更复杂的几何形状和更高效的建模流程。 改进的材质和渲染:引入了新的材质类型和改进的…

05.C++类和对象(下)

1.再探构造函数 • 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表&#xff0c…

基于springboot+vue+uniapp的短文写作竞赛管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

Maven的配置文件pom.xml标签详解(含常用plugin)

一、什么是pom.xml pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM) 的缩写。POM定义了项目的所有属性,包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml,我们可以轻松地管…