数学建模预测类——拟合算法

写在前文,懒编正准备参加数学建模并负责编程部分,写文章的初衷是为了加深自己的记忆。当然,如果可以帮助到其他人我也是很开心的。我主要介绍的是拟合算法的应用,所以接下来的文章更适合和我有一样工作的同学浏览。

今天学习了一个新算法——拟合算法
经过学习,发现拟合算法在数学建模中可以进行预测
下面我们来瞅瞅这神奇的算法。

1、插值算法和拟合算法的区别

前面介绍过插值法,插值算法和拟合算法在某些方面好像是类似的,但其实却大有不同。

比如有几个已知点。
插值是按照一定的规律将几个点用线串起来,即寻求串的规律最好。但如果样本点过多,那么这个多项式次数过高,会造成龙格现象。而拟合是寻求一个曲线使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好。只要保证拟合误差足够小就可。

2、引例及知识点

2.1、题目说明

用matlab生成两组数据:x(1-10之间的[10,1]的矩阵)和y(1-20之间的[10,1]的矩阵)
我们设置拟合曲线为y = kx + b(x的次数越高,拟合的误差SSE(这个参数后文有介绍)越小,但是我们一般选取简单的模型,所以在SSE相差不多的情况下,选取低阶的拟合曲线)
求样本点和拟合曲线最接近时,k和b的值

2.2、解题步骤

用matlab实现拟合有两种办法,一种是用上面我给出的公式去进行计算,另外一种就是用cftool工具箱
(matlab中的cftool可以实现拟合)所谓“有便宜不占wbd”(hhh开玩笑) 我这里用cftool实现一下,因为真的很方便。
直接在命令行输入“cftool”运行就可以!

① 在界面左侧这里输入x和y。然后cftool可以直接使用一次函数进行拟合。
在这里插入图片描述
② 如果要设置其他拟合方式可以在界面右侧的这里进行选择
在这里插入图片描述
③ 在界面右侧会生成这样一个图像(会发现点和曲线其实差的很远,这是因为我的x和y是随机生成的)
在这里插入图片描述
④ 然后所求的k和b matlab 直接就可以算出来(p1就是k,p2就是b)
在这里插入图片描述
这里发现出现了一个SSER—square
接下来来解释一下这两个重要的参数,此俩其实是评价拟合的好坏的两个参数

2.3、解释SSE、R—squre

① SSE是误差平方和。根据它的名字就可以看出来,我们可以根据这个参数来评价拟合的好坏。SSE越小,拟合的程度越好。(SSE也是可以算出来的,有公式,我这里就不介绍了)

② R—squre是拟合优度。这个参数越接近1,说明误差平方和越接近0,拟合程度越好。

这里特别要注意的一点是:既然两个参数都能评判拟合程度的好坏。那选哪个呢?
R—squre只能用于拟合函数是线性函数(相对于参数而言而不是变量)时,而SSE适用于所有情形。
所以当我们的拟合函数不是线性函数时,用SSE评价就好了。

3、实例

3.1、题目说明

下表是中国人口数据(数据是捏造的),请预测后10年的中国人口

年份人口(百万)
2009133126
2010133770
2011134413
2012135069
2013135738
2014136427
2015137122
2016137866
2017138639
2018139539
2019140000

3.2、解题

①== 一次函数拟合==
代码如下:(预测的人口用图像画出来)
在这里插入图片描述
运行结果如下:
在这里插入图片描述
可以看出,由于我们原本数据就接近符合一次函数,之后预测的人口是按照一次函数增长的。
SSE 为:
在这里插入图片描述
发现SSE是92460,这个数相对于我们原本的数字来说是一个1/10倍的关系。

傅里叶拟合(这里我是随便挑选了一个模型进行尝试)
代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
SSE为:
在这里插入图片描述
发现这个数字比用一次函数进行预测的误差平方和小了,也就是说傅里叶拟合与一次函数拟合相比更适合本题预测。

注:

其他各个函数拟合都可以进行试验,选择SSE最小的即可。

本文参考清风老师数学建模视频

https://www.bilibili.com/video/BV1DW411s7wi?p=6

  • 9
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python数学建模中,常用的算法有很多。其中一些常见的算法包括: 1. 线性回归:通过拟合一条直线来预测因变量和自变量之间的关系。 2. 最小二乘法:通过求解一个最小二乘问题来拟合数据。 3. 插值:通过已知数据点推导出在这些点之间的值。 4. 数值积分:通过数值方法计算函数的定积分。 5. 数值微分:通过数值方法计算函数的导数。 6. 非线性方程求解:通过数值方法求解无法用解析方法求解的方程。 7. 最优化问题:通过数值方法找到使目标函数取得最大或最小值的变量值。 8. 蒙特卡洛模拟:通过随机抽样的方法模拟实验结果,用于分析概率和统计问题。 Python中有许多第三方库可以用于实现这些算法,如NumPy、SciPy、Pandas、Matplotlib等。这些库提供了丰富的函数和方法来支持各种数学建模任务。通过使用这些库,你可以轻松地实现各种数学建模算法,并进行相应的数据分析和可视化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python interpolate_如何使用python完成数学建模常用算法](https://blog.csdn.net/weixin_39974958/article/details/110251180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Python数学建模常用算法代码——蒙特卡洛模型】](https://blog.csdn.net/m0_56694518/article/details/130445996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值