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

【数模修炼之旅】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 minimisesthe squared error.其中需要关注的参数为3个:x、y分别为需要拟合的散点的坐标序列,deg为需要拟合的多项式的最高项数。
例如:
# coding=utf-8
import pylab
import numpy as npif __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_fitdef func(x, a, b, c):return b * np.power(a, x) + cif __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为函数的参数listy_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.rhkb.cn/news/406004.html

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

相关文章

C++ | Leetcode C++题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int ans 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;ans cur;}return ans;} };

91.WEB渗透测试-信息收集-Google语法(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;90.WEB渗透测试-信息收集-Google语法&#xff08;4&#xff09; 怎样判断哪些漏洞有什么样…

数据结构——顺序栈和链式栈

目录 引言 栈的定义 栈的分类 栈的功能 栈的声明 1.顺序栈 2.链式栈 栈的功能实现 1.栈的初始化 (1)顺序栈 (2)链式栈 (3)复杂度分析 2.判断栈是否为空 (1)顺序栈 (2)链式栈 (3)复杂度分析 3.返回栈顶元素 (1)顺序栈 (2)链式栈 (3)复杂度分析 4.返回栈的大…

怎么管控终端电脑上的移动端口

管控终端电脑上的移动端口&#xff0c;尤其是USB等移动端口&#xff0c;是确保企业数据安全和提升网络管理效率的重要手段。 一、使用注册表编辑器禁用USB端口&#xff08;适用于Windows系统&#xff09; 打开注册表编辑器&#xff1a; 同时按下“WinR”组合键&#xff0c;打…

IPD产品开发流程详细活动图及说明

1、概念阶段 完整见文章后 2、计划阶段 篇幅有限&#xff0c;获取完整阶段活动图以及步骤说明&#xff0c;见下图

【UE5】Groom毛发系统的基本使用——给小白人添加头发

目录 效果 步骤 一、准备 二、使用3DsMax制作毛发 三、在UE中给小白人安装毛发 四、修改毛发材质 效果 步骤 一、准备 1. 新建一个第三人称模板工程 2. 在项目设置中&#xff0c;勾选“支持计算蒙皮缓存” 3. 在插件面板中&#xff0c;启用“Groom”和“Alembic Gro…

API网关之Apache ShenYu

Apache ShenYu&#xff08;原名Soul&#xff09;是一个开源的API网关&#xff0c;旨在支持高性能、跨语言和云原生架构。它为管理和控制客户端与服务之间的数据流提供了一种高效且可扩展的解决方案。 文档见 Apache ShenYu 介绍 | Apache ShenYu 以下是Apache ShenYu的详细介…

Open3D mesh 模型锐化

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数 输出参数 2.2完整代码 三、实现效果 3.1原始mesh 3.2处理后mesh 3.3数据显示 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总…

【大模拟】逻辑回环类

区块链 AcWing 3285. 区块链 - AcWing 区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识&#xff0c;也在金融等领域有广泛的应用。 本题中&#xff0c;我们需要实现一个简单的区块链系统。 在一个分布式网络中&#xff0c;有 nn 个节点通…

5G毫米波测试助力突破高频段设备局限,实现高效外场测试

作者介绍 一、方案背景 随着业务对带宽需求的不断增加&#xff0c;通信频谱不断向更高频谱延伸&#xff0c;5G毫米波具有丰富的频率资源&#xff0c;是移动通信技术演进的必然方向。下图是ITU的WRC-19会议发布的目前5G所占用频段。 从图中可以看出&#xff0c;在5G毫米波测试中…

Java基础核心知识学习笔记

方法重载 请记住下面重载的条件 方法名称必须相同。参数列表必须不同&#xff08;个数不同、或类型不同、参数类型排列顺序不同等&#xff09;。方法的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为方法的重载。重载是发生在编译时的&#xff0c;因为编译器可以根…

【计算机网络】网络版本计算器

此前我们关于TCP协议一直写的都是直接recv或者read&#xff0c;有了字节流的概念后&#xff0c;我们知道这样直接读可能会出错&#xff0c;所以我们如何进行分割完整报文&#xff1f;这就需要报头来解决了&#xff01; 但当前我们先不谈这个话题&#xff0c;先从头开始。 将会…

第二十三节、血量更新逻辑的实现

一、创建代码 引入命名空间 using UnityEngine.UI; 调用UI必须有这个代码 二、ScriptObject类 1、是一个持久化存储文件的类型 接收所有的事件方法 先继承SO类&#xff0c;然后创建项目菜单 2、进行订阅 放入事件类&#xff0c;关联代码&#xff0c;即可进行广播 传递给这…

蓝桥杯2021第十二届蓝桥杯青少年组省赛试题真题

带我去看题解&#xff01;&#xff01;&#xff01; 带我去看题单&#xff01;&#xff01;&#xff01; 目录 第一题&#xff1a;[2021第十二届蓝桥杯青少年组省赛] 字符串 题目背景 题目描述 输入格式 输出格式 输入输出样例 第二题&#xff1a;[2021第十二届蓝桥杯…

AI + 3D 机器人视觉领域综合资源库

随着人工智能技术的不断发展,3D 机器人视觉领域已经成为了一个备受关注的研究方向。在这个领域中,研究者们致力于探索如何让机器人更好地理解三维空间,从而实现更加智能和灵活的操作。为了方便大家学习和研究,这里介绍一个全面的资源库——Awesome Robotics 3D,它汇集了最…

Ajax技术详解

Ajax简介 Ajax 即 "Asynchronous Javascript And XML"&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建交互式、快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局部数据的技术。 为什么要使…

Markdown中使用 LaTeX 绘图 -- TikZ

Markdown中使用 LaTeX 绘图 -- TikZ 1 介绍1.1 概述1.2 与其他图包对比 2 示例 & 学习[The TikZ and PGF Packages](https://tikz.dev/)[Graphics with TikZ in LaTeX](https://tikz.net/)[TikZ PGF Manual](https://www.bu.edu/math/files/2013/08/tikzpgfmanual.pdf)[在 …

【从Qwen2,Apple Intelligence Foundation,Gemma 2,Llama 3.1看大模型的性能提升之路】

从早期的 GPT 模型到如今复杂的开放式 LLM&#xff0c;大型语言模型 (LLM) 的发展已经取得了长足的进步。最初&#xff0c;LLM 训练过程仅侧重于预训练&#xff0c;但后来扩展到包括预训练和后训练。后训练通常包括监督指令微调和校准&#xff0c;这是由 ChatGPT 推广的。 自 …

机器学习:逻辑回归处理手写数字的识别

1、获取数据, 图像分割该数据有50行100列&#xff0c;每个数字占据20*20个像素点&#xff0c;可以进行切分,划分出训练集和测试集。 import numpy as np import pandas as pd import cv2 imgcv2.imread("digits.png")#读取文件 graycv2.cvtColor(img,cv2.COLOR_BGR2G…

LVS负载均衡群集-DR模式

一、负载均衡群集 1.数据包流向分析 客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。Director Server 和 Real Server 在同一个网络中&#xff0c;数据通过…