【数学建模】——拟合算法

【数学建模】——拟合算法

拟合算法定义:与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。

插值和拟合的区别:

例子:

此例子中如果用插值算法,因为各点连起来需要的线段过去曲折不方便插值,所以我们可以利用拟合算法解决:

 

 

最小二乘法:

最小二乘法作为我们拟合算法的一个铺垫为后续的检验我们拟合的函数是否符合真实的图形而做基础条件

拟合值:将原xi代入到拟合的函数中得到的y^.

Matlab代码实现最小二乘法来检验拟合函数:

(这里我们的代码实现是直接自己求k和b再去检验,我们也可以直接传入数据让matlab直接给我们求出来,后面我们讲曲线拟合工具箱时会讲到)

我们构造的函数是y=kx+b

  1. 传入数据画出散点
  2. 求出n(行数)利用公式求出k和b
  3. Hold函数:继续在之前的图形上来画图,grid on函数:显示网格。
  4. 画出y=kx+b的函数图像

a.利用传统画法模拟生成x,y,y=kx+b,用plot画出

 

b.利用匿名函数法

匿名函数:在matlab中不能直接定一个含有未定义变量的函数方程,所以需要匿名含来解决此问题.

形式:函数名=@(自定义变量)函数方程

Eg:z=x^2+y^2 (false,xy没有被定义过)

Z=x@(x,y)x^2+y^2(true)。

匿名函数完成后再用fplot函数构图。

Fplot函数:可用于画出匿名一元函数的图像

fplot(函数名,[定义域范围])

eg:f=@(x)k*x+b; fplot(f,[2.5,7]);

 

如何让评价拟合的好坏?(出列)

拟合优度:到!

 

 

 

对于我们评价拟合的好坏有时需要看R^2(拟合优度),有时需要看SSE(误差)那如何区分什么时候看R^2,什么时候看SSE呢?

R^2只能用于判断线性函数时(此线性分彼线性)

 

如何让判断函数是否线性:

 

计算拟合有限度的代码:

 

 

MatLab——曲线拟合工具箱

a.位置:

 

b.也可以在命令行窗口输入cftool运行打开。

在拟合器中点击选择数据,会选择我们编译器中定义的变量,也可以取名字。

 

输入数据后会自动构建散点图,这样我们再从拟合类型中选择合适的方程或自定义方程(选择后会出拟合的线段,看看是否接近)

 

函数图像的保存:

  1. 截图(不清晰)
  2. 导出:上方由导出->导出为窗口(会形成一个小窗口)->文件->导出设置->(如果为了图像更加清晰可以点击->渲染->分辨率->600)->导出(选择jpg

/png格式)

 

Matlab拟合工具想生成图像后还可以帮你生成此图像的代码(作为自定义函数形式)

如何讲生成的代码保存的自己的代码中?

导出->生成代码

 

如何保存?

生成代码后->ctrl+s保存系统会自动以函数名定义问保存的文件名。

我们再把第一行function后面的复制到主函数中就可以应用了。

记得要把第一行后面的一些注释去掉就可以了

(类似这部分)

函数名复制完后我们在应用和的时候只需要在定义一个变量用来存放我们在生成此图像时用到的函数(如何时系统的拟合函数在拟合工具箱会显示),在一些拟合函数中的参数也要定义上。

Eg:

如下图我们输入的时自定义函数,它会自动帮我们求出参数的值

在主函数应用的时候我们需要先把这些参数变量定义出来

 

                                                                                            

自己模拟数据进行演示:

 

  1. randi(10,2,5):随机产生一个1-10之间的随机值正数矩阵,每次生成的数都会变

 

也可以定义随机值的范围:

 

2.rand函数产生一个0-1之间随机值的矩阵(S3,S4)

 

 

  1. normrnd函数:

 

  1. roundn函数:任意位置四舍五入

(在第几为四舍五入,第几位后面的位数全部归0)(四舍五入0.5,5,50,500……)

 

例题预测美国人口:参考代码:

%主函数
clear;clc
%第一步传入数据
year = 1790 : 10 :2000;
populations = [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4]
%第二部绘制散点图
plot(year,populations,'o')
%第三步进行拟合函数利用拟合工具箱
cftool;
%拟合完成后生成的自定义函数:
[fitresult, gof] = createFit_American(year, populations)
%第四步定义变量,函数传入要预测的年份,绘制预测的图像
t = 2001:2030;
r = 0.0274;
xm = 342.4412;
predictions = xm./(1+(xm./3.9-1).*exp(-r.*(t-1790))); % 计算预测值(注意这里要写成点乘和点除,这样可以保证按照对应元素进行计算)
figure(2)
plot(year,populations,'o',t,predictions,'.') % 绘制预测结果图

 

%生成拟合图像的自定义函数
function [fitresult, gof] = createFit_American(year, populations)
%% 拟合: '美国人口'。
[xData, yData] = prepareCurveData( year, populations );
% 设置 fittype 和选项。
ft = fittype( 'xm/(1+(xm/3.9-1)*exp(-r*(t-1790)))', 'independent', 't', 'dependent', 'x' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.StartPoint = [0.779051723231275 100];
% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft, opts );
% 绘制数据拟合图。
figure( 'Name', '美国人口' );
h = plot( fitresult, xData, yData );
legend( h, 'populations vs. year', '美国人口', 'Location', 'NorthEast', 'Interpreter', 'none' );
% 为坐标区加标签
xlabel( 'year', 'Interpreter', 'none' );
ylabel( 'populations', 'Interpreter', 'none' );
grid on

注意事项:在我们输入自定义函数后如果线段不符合点我们可以在你和选项中函数方程下面->高级选项,修改系数的值(本题的系数时r和xm我们已将xm改为100后符合线段数据)

 

最后的结果:

 博主主要跟着清风数学建模的课程学习,其中里面的一些图片都来源于上课视频的截图。

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

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

相关文章

好用的Linux远程工具

你好,我是Martin,今天给大家介绍几款主流的远程工具。 远程工具介绍 关于远程连接的用户分类时这样的,通常需要进行远程连接的人有两类,一类是系统管理员,另一类是普通的用户。远程连接工具是一些可以让你通过网络连接…

2023年华数杯建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&#xff0…

Nacos配置中心设置Mongodb

目录 1.common模块导入nacos config依赖 2.common模块新建bootstrap.yaml 3.在自己的模块导入common模块依赖 4.打开nacos新建配置,发布 5.运行服务并测试 效果:在部署完成后,其他人可以自动连接到你本地mongoDB数据库,无需再…

建模教程:如何利用3ds Max 和 After Effects 实现多通道渲染和后期合成

推荐: NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 创建基本场景 步骤 1 打开 3ds Max。 打开 3ds Max。 步骤 2 我做了一个简单的场景。我放了三个 彼此之间有一定距离的物体。 制作对象 步骤 3 按 Ctrl-C 键 在透视视图中创建摄影机。 创建相机 …

Android性能优化—LeakCanary内存泄漏检测框架分析。

一、什么叫内存泄漏、内存溢出? 内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个10M的Bitmap,但系统分配给APP的连续内存不足10M&#xff0c…

P3372 【模板】线段树 1(内附封面)

【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m,分别表示该数列数字的个数和操作的总个数。 …

数据库管理员知识图谱

初入职场的程序猿,需要为自己做好职业规划,在职场的赛道上,需要保持学习,并不断点亮自己的技能树。  成为一名DBA需要掌握什么技能呢,先让Chat-GPT为我们回答一下: 数据库管理系统 (DBMS)知识&#xff…

B079-项目实战--支付模块 定时任务 项目总结

目录 概述示例jar包配置类任务详情 项目应用封装的工具类QuartzUtils封装IQuartzSrvice和QuartzServiceImpl封装参数QuartzJobInfo编写任务逻辑MainJob调用第三方支付前添加定时任务异步回调后移除定时任务 订单支付整体流程 概述 优势:Tmer不支持持久化&#xff0…

Java的JDBC编程

目录 一、概念 二、Java代码操作MySQL 1、创建一个项目 2、引入MySQL的驱动包,作为项目的依赖 3、把 jar包 导入到项目中 4、创建一个数据源 5、建立网络上的连接 6、构造SQL语句 7、执行 sql 语句 8、释放必要的资源.关闭连接 一、概念 JDBC ,即…

【Jquery大事件时间线】jquery实现大事件时间线(时间轴)的滚动切换效果『附完整源码』

文章目录 写在前面涉及知识点页面效果1、搭建框架1.1 模块搭建1.2 内容填充1.3 时间线的切换 2、完整代码2.1 html源码2.2 CSS源码2.3 js源码 3、完整源码包下载3.1百度网盘3.2 123云盘3.3邮箱留言 总结 写在前面 其实这种大事件记录的web页面也是我们常见的,尤其是…

Go语言性能优化建议与pprof性能调优详解——结合博客项目实战

文章目录 性能优化建议Benchmark的使用slice优化预分配内存大内存未释放 map优化字符串处理优化结构体优化atomic包小结 pprof性能调优采集性能数据服务型应用go tool pprof命令项目调优分析修改main.go安装go-wrk命令行交互界面图形化火焰图 性能优化建议 简介: …

使用redis-cli操作redis

redis-cli是原生redis自带的命令行工具,可以帮助我们通过简单的命令连接redis服务,并进行数据管理,即redis键(key)和redis数据结构的管理。 关于如何进入redis-cli命令行客户端,请查看文章:Redi…

CMake:为Eigen库使能向量化

CMake:为Eigen库使能向量化 导言构建Eigen项目结构CMakeLists.txt相关源码 导言 本篇开始将涉及检测外部库相关的内容,期间会穿插着一些其他的内容。为了能够使得系统在系统中运行Eigen库,我们首先需要在系统中配置好Eigen库。然后介绍与Eigen库相关的C…

【Android】APP启动优化学习笔记

启动优化目的 用户体验: 应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢,用户可能会感到不满,并且有可能选择卸载或切换到竞争对手的应用。通过启动优化,可以提高应用的启动…

132个心理性格趣味测试ACCESS\EXCEL数据库

今天又遇到了一个心理测试的数据库,这个数据库在表结构的设置上很直观,属于那种好的数据库结构,共分三个表,一个是测试项目描述表、一个是测试题选项得分表、一个是根据得分区间解析表,表与表之间通过“question_id”字…

【Python】pyqt6入门到入土系列,非常详细...

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。 PyQt6的官网:www.riverbankcomputing.co.uk/news。 PyQt6是由Riverbank Co…

MTK system_server 卡死导致手机重启案例分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、MTK AEE Log分析工具二、AEE Log分析流程三、system_server 卡死案例分析及解决 本文主要针对 Exception Type: system_server_watchdog , system_…

力扣SQL之路:窗口函数应用

文章目录 1.引言2.力扣SQL题目3. 解题策略4.代码实现5.总结 1.引言 窗口函数是 SQL 中一种强大的分析函数,它可以在结果集中创建一个窗口,并对窗口内的数据进行计算和分析。在力扣(LeetCode)的 SQL 题目中,窗口函数经…

Linux进程概念(一)

文章目录 Linux进程概念查看进程杀死进程进程标识符 手动创建进程的方式fork函数创建进程 进程状态运行态阻塞态和挂起 Linux进程概念 前文我们了解了,进程的基本概念,在课本上被描述为,正在执行的程序,在linux内核上&#xff0c…

如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

作者:双飞(花名:小鱼) 杭州电子科技大学在读硕士 StoneDB 内核研发实习生 ❝ 大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久&#xff0c…