【数模修炼之旅】05 拟合模型 深度解析(教程+代码)

news2024/11/15 13:57:22

【数模修炼之旅】05 拟合模型 深度解析(教程+代码)

接下来 C君将会用至少30个小节来为大家深度解析数模领域常用的算法,大家可以关注这个专栏,持续学习哦,对于大家的能力提高会有极大的帮助。

拟合模型介绍及应用

拟合模型是一种数学工具,用于寻找一个函数或方程式,使其能最好地表达一组数据之间的关系。在数学建模(数模)中,拟合模型可以帮助我们从实验或观测数据中抽象出关键的数学关系,进而用于预测、优化或理解复杂系统的行为。这个算法必须得会,是数模竞赛中的基础算法之一。

1.1 拟合模型的基本类型

1.2 拟合模型在数学建模中的应用

  1. 预测模型:在经济学、气象学等领域,拟合模型可以用来预测未来的趋势。例如,通过拟合历史经济数据,模型可以预测未来的经济增长速度。
  2. 系统优化:在工程领域,拟合模型可以用来优化系统设计。例如,在化工过程中,通过拟合反应速率和原料浓度的关系,可以确定最佳的反应条件。
  3. 参数估计:在生物学和化学实验中,常常通过拟合实验数据来估计生化反应的动力学参数,如速率常数、活化能等。
  4. 风险管理:在金融领域,通过拟合历史金融市场数据,可以建立模型来估计金融资产的风险和回报,用于指导投资决策。

拟合模型代码(matlab+python)

这个算法比较简单,我们就用python代码给大家讲解一下。不再单独介绍其步骤。

2.1 python

拟合数据

x = np.arange(1, 31, 1)

y = np.array([20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558, 651, 760, 887, 1035, 1208, 1410])

2.1.1 多项式拟合

由泰勒公式知道:任何一个函数都可以拆分成近似于这个函数的多项式表达。
多项式拟合需要用到的函数是np.polyfit,它的使用方法为:

def polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False):
    """
    Least squares polynomial fit.
    Fit a polynomial ``p(x) = p[0] * x**deg + ... + p[deg]`` of degree `deg`
    to points `(x, y)`. Returns a vector of coefficients `p` that minimises
    the squared error.

其中需要关注的参数为3个:x、y分别为需要拟合的散点的坐标序列,deg为需要拟合的多项式的最高项数。
例如:
# coding=utf-8
import pylab
import numpy as np

if __name__ == "__main__":
  x = np.arange(1, 31, 1)
  y = np.array([20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558, 651, 760, 887, 1035, 1208, 1410])

  z1 = np.polyfit(x, y, 3)              # 曲线拟合,返回值为多项式的各项系数
  p1 = np.poly1d(z1)                    # 返回值为多项式的表达式,也就是函数式子
  print(p1)
  y_pred = p1(x)                        # 根据函数的多项式表达式,求解 y
  # print(np.polyval(p1, 29))             根据多项式求解特定 x 对应的 y 值
  # print(np.polyval(z1, 29))             根据多项式求解特定 x 对应的 y 值

  plot1 = pylab.plot(x, y, '*', label='original values')
  plot2 = pylab.plot(x, y_pred, 'r', label='fit values')
  pylab.title('')
  pylab.xlabel('')
  pylab.ylabel('')
  pylab.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0, 0))
  pylab.show()
  pylab.savefig('p1.png', dpi=200, bbox_inches='tight')

2.1.1 非多项式拟合

如果需要进行多项式拟合,你必须大体上知道散点的大致曲线形式,大致的函数的形式。
比如,例子中的散点看起来像是指数的函数分布,因此可以给出func的函数:
def func(x, a, b, c):
  return b * np.power(a, x) + c

只要给出具体的函数形式(可以是任意的,只要能写的出来皆可),用最小二乘的方式去逼近和拟合,即求出函数的各项系数。
此时用到的是scipy.optimize包下的curve_fit函数了:
# coding=utf-8
import pylab
import numpy as np
import sys, os
from scipy.optimize import curve_fit

def func(x, a, b, c):
  return b * np.power(a, x) + c

if __name__ == "__main__":
  x = np.arange(1, 31, 1)
  y = np.array([20, 23, 26, 29, 32, 35, 38, 45, 53, 62, 73, 86, 101, 118, 138, 161, 188, 220, 257, 300, 350, 409, 478, 558, 651, 760, 887, 1035, 1208, 1410])

  popt, pcov = curve_fit(func, x, y)                # 曲线拟合,popt为函数的参数list
  y_pred = [func(i, popt[0], popt[1], popt[2]) for i in x]    # 直接用函数和函数参数list来进行y值的计算
  print(popt)

  plot1 = pylab.plot(x, y, '*', label='original values')
  plot2 = pylab.plot(x, y_pred, 'r', label='fit values')
  pylab.title('')
  pylab.xlabel('')
  pylab.ylabel('')
  pylab.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0, 0))
  pylab.show()
  pylab.savefig('p1.png', dpi=200, bbox_inches='tight')

2.2 matlab

多项式拟合步骤
(1)输入待拟合数据x,y
(2)输入函数公式进行拟合
x=0:0.1:1;
 
y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66   9.56 9.48 9.30 11.2];
 
A=polyfit(x,y,2)

指定函数拟合步骤
 (1)输入待拟合数据x,y
(2)指定函数关系式
syms t;
x=[0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.09;0.032;-0.015;-0.02];%指定函数形式为f(t)=acos(kt)e^(wt),进行拟合
f=fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun=fit(x,y,f)     %显示拟合函数
xi=0:.1:20;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-');

需要参加数模竞赛的同学,可以看我的这个名片,会有最新的助攻哦:(大型比赛前会对名片进行更新)

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

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

相关文章

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案 大语言模型的训练数据一般基于公开的数据,且每一次训练需要消耗大量算力,这意味着模型的知识一般不会包含私有领域的知识,同时在公开知识领域存在一定的滞后性。为了解决这一…

SSM学生社团管理系统—计算机毕业设计源码20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

python3爬虫(未完结)

一个简单的例子:爬取自己的csdn博客,统计每篇博客的访问量,制作一个柱状图,以访问量从大到小的方式显示。 1. 首先从“个人主页”爬取所有所有文章的链接 1.1 打开个人主页,右键->检查:可以看到每篇文章…

如何使用Java SpringBoot+Vue搭建二手闲置交易系统?

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

四步解决国标设备接入问题

用国标协议完成多品牌设备统一接入,是智能设备在多场景应用中都会碰到的安装步骤。国标接入常常过程复杂,这边介绍一种相对简便的方法,用萤石开放平台的“国标设备添加工具”接入 Step1:私信我获取安装包 私信我获取国标设备添加…

Nginx服务器申请及配置免费SSL证书

免费SSL证书申请 背景: 我的情况是这样,域名解析是华为云的,然后免费证书在腾讯云申请。但是大致的配置流程都是一样的 在腾讯云平台申请免费的SSL证明(目前有效期是9天),申请步骤如下 主要步骤说明 申请免费SSL证书配置证书到域…

自定义变量添加到分机呼叫信息(mod_cti基于FreeSWITCH)

文章目录 前言联系我们添加流程1. 修改cti.json配置2. 配置自动外呼进入排队转坐席3. 变量同步到坐席通道 4. 导入号码添加自定义变量 前言 在默认配置中,分机的呼叫信息会被推送到redis的hash表中,hash表名:calls。我们可以通过修改配置&am…

【大模型LLMs】RAG实战:基于LlamaIndex快速构建RAG链路(Qwen2-7B-Instruct+BGE Embedding)

【大模型LLMs】RAG实战:基于LlamaIndex快速构建RAG链路(Qwen2-7B-InstructBGE Embedding) 1. 环境准备2. 数据准备3. RAG框架构建3.1 数据读取 数据切块3.2 构建向量索引3.3 检索增强3.4 main函数 参考 基于LlamaIndex框架,以Qwe…

【GitLab】使用 Docker 安装 GitLab 1:配置 SSH 端口

使用 Docker 安装 GitLab 要求修改ssh端口 GitLab 使用 SSH 通过 SSH 与 Git 交互。默认情况下,GitLab 使用端口22。 要在使用 GitLab Docker 映像时使用其他端口,您可以执行以下操作之一: 更改服务器的 SSH 端口(推荐)。 更改 GitLab Shell SSH 端口。 更改服务器的 SSH …

电测量数据交换DLMS∕COSEM组件第62部分:COSEM接口类(4)

1.7COSEM服务器模型 COSEM服务器被构建为3层体系结构如图3所示。 图4示例说明如何用COSEM服务器模型构建一台组合式计量设备。 1.8COSEM逻辑设备 1.8.1概述 COSEM逻辑设备包含一组COSEM对象,每个物理设备均应包含一个“Management logical device”。对COSEM逻辑设备…

MPLS相关实验

一、实验拓扑图以及实验要求 1、实验拓扑图 2、实验要求 合理利用IP地址进行分配R3、R4、R5、R6运行ospf在R2、R3、R4、R5、R6上运行MPLSR1上使用静态,R7上运行rip协议,R8上运行ospf协议全网可达 二、实验分析 合理利用IP地址进行分配R3、R4、R5、R6…

将自己的网站改造成可安装的PWA

概述 本文是一篇水文,感兴趣的读者可以看看。分享一下怎么讲自己的网站改造成可安装的PWA。 PWA简介 渐进式 Web 应用(Progressive Web App,PWA)是一个使用 web 平台技术构建的应用程序,但它提供的用户体验就像一个…

死锁问题分析和解决——资源回收时

1.描述问题 在完成线程池核心功能功能时,没有遇到太大的问题(Any,Result,Semfore的设计),在做线程池资源回收时,遇到了死锁的问题 1、在ThreadPool的资源回收,等待线程池所有线程退出时&#xff…

2024年【浙江省安全员-C证】复审模拟考试及浙江省安全员-C证作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 浙江省安全员-C证复审模拟考试参考答案及浙江省安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及浙江省安全员-C证操作证已考过的学员汇总,相对有效帮助浙江省安全员-C证作业模拟考试学员顺利通…

C++进阶(14)类型转换、IO流

文章目录 一、类型转换C语言隐式类型转换强制类型转换 C类型转换的情况类型转换的函数(4个) 二、IO流1、缓冲区2、提高输入输出效率3、文件操作文件权限写操作 --- ofstream文本方式写入二进制方式写入 读操作 --- ifstream文本方式读取二进制方式读取 其…

如何使用DEV-C++做游戏?

我的B站视频做过关于python的小游戏开发,但很多小伙伴希望通过C做一些有趣的动画或游戏,该怎么实现呢? B站:bigbigli_大李 大家好,我是大李。 今天主要跟大家谈谈如何通过C做一些小游戏开发,这里我们就 使用…

JavaScript - Api学习 Day02(事件监听、流、委托)

事件监听 一、事件监听1.1 什么是事件、事件监听1.1.1 事件监听的基本流程1.1.2 重点关注以下三个核心要素 1.2 Event handling models 事件处理模型1.2.1 DOM Level 版本(1)DOM Level 0(2)DOM Level 2 1.2.2 事件类型&#xff08…

iPad协议08算法

微信协议就是基于微信IPad协议的智能控制系统,利用人工智能AI技术、云计算技术、虚拟技术、边缘计算技术、大数据技术,打造出智能桌面系统RDS、 智能聊天系统ACS 、智能插 件系统PLUGIN 、云计算服务CCS 、任务管理系统TM、设备管理服务DM、 应用管理系统…

ECCV 2024亮点:APGCC技术刷新人群计数与定位的SOTA

摘要 在ECCV 2024会议上,一项名为APGCC的新技术以其卓越的性能引起了广泛关注。这项技术通过创新的方法,显著提高了人群计数和定位的准确性和鲁棒性,为监控、事件管理和城市规划等领域带来了新的解决方案。 正文: 随着城市化进…

ant design pro 技巧之实现列表页多标签

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的ant design pro 中用户的表单如何控制多个角色ant des…