Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4.算法类(1) --Matlab多项式曲线拟合预测新冠病毒感染人数

4.算法类(1) --Matlab多项式曲线拟合预测新冠病毒感染人数

作者头像
用户9925864
发布于 2022-07-27 00:06:35
发布于 2022-07-27 00:06:35
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

年初的新冠疫情来势汹汹,但好在政府及时控制住,经济得以恢复正常。疫情发生后,国内外很多研究学者都通过建模等方法分析了疫情可能导致的感染人数,下面分享一下通过Matlab的多项式曲线拟合预测新冠病毒感染人数趋势,结果粗糙,仅仅作为学习。


写在前言:预测数据基于官方公布的数据,本文只做一个学术研究,结果仅供参考;


1、数据获取

为了简化过程,网上查询到对应的感染人数。选择了2020/1/18到2/3日的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];      % 累计天数
x2 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];         % 新增天数
y1 = [291,391,440,571,830,1287,1975,2744,4515,5974,7711,9692,11791,14411,17205,20438];  % 累计
y2 = [77,149,131,259,444,688,769,1771,1459,1737,1982,2102,2590,2829,3235];              % 新增

2、数据处理

在后续绘图的过程中,将横坐标改为日期的形式,用来表示每天的病例人数,用到了matlab中的日历类型。

首先,使用datetime函数,指定开始日期:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t1=datetime(2020,1,18);

由于绘图时横坐标需要精确到每天,故将每天的datetime类型通过for循环存入数组:

利用caldays函数进行日期的加减运算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t1=datetime(2020,1,18);
 
for i = 1:length(x1)
    accumulate = [accumulate t1+caldays(i)];
end
 
for i = 1:length(x2)
    add = [add t1+caldays(i+1)];
end
 
for i=1:33
    date = [date t1+caldays(i)];
end

这样,使用第二段代码中data这个数组作为横坐标就能绘制日期横坐标的图了。


3、模型建立——多项式拟合

3.1、多项式拟合原理和本文说明

多项式拟合是用一个多项式展开去拟合包含数个分析格点的一小块分析区域中的所有观测点,得到观测数据的客观分析场。展开系数用最小二乘拟合确定。

多项式拟合,将一组数据尽可能的映射到一个多项式函数上,反映这一组数据之间的一个函数关系。故可以使用多项式拟合方法对于数据的未来走向进行一定程度上的预测。

对多项式进行曲线拟合可以使用polyfit函数,该函数能够很好地进行曲线拟合,用法MATLAB程序代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p =polyfit(x,y,n)

其中,x为横坐标,在本文中,为自2020-01-18开始的天数(1代表2020-01-19,以此类推),y为纵坐标,在本为中,为自2020-01-18开始每日的累计感染人数。

n为拟合的多项式次数。

3.2、拟合次数n的选取

在本文中,n=4,即多项式的最高次数为4。选取原因如下:

1、一次、二次、三次函数单调性太过明显,线性和指数级别的单调增加不能良好反映疫情的发展状况;

2、五次以上的拟合情况,结果如下:

据分析,n=3时,单调递增显然不符合疫情发展趋势,n=5和6时结果太夸张。

所以3、5、6和更高次的拟合都不符合目前的实际情况。

当n=4时:

在四次多项式拟合中疫情出现了拐点,虽然在拐点之后,函数是单调递减的,但是结合目前国家的大力防控措施,可以姑且认为四次多项式在拐点之前的增长是具有一定参考价值的。

拟合代码实现如下(使用polyval函数预测每日感染人数):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
order = 4;
p1 =polyfit(x1, y1, order);      % 累计 四次函数
p2 =polyfit(x2, y2, order-1);      % 新增是累计的一阶导数 三次函数
add_new = polyval(p2,day_num); % 预测的新增
total = polyval(p1,day_num); % 累计

画图函数实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
figure
plot(date,total,'r')
hold on;
plot(date,add_new,'b')
hold on;
plot(accumulate, y1, '*')
hold on;
plot(add, y2, 'o')
grid on;

4、数据分析与预测

通过将1月18日统计数据开始后的天数代入函数,使用polyval函数计算每日的感染人数,并绘制图像

由此分析,疫情将在2月15日至2月20日期间出现“拐点”,即累计感染人数显著降低。

代码全文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clc
clear
close all
x1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];      % 累计天数
x2 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];         % 新增天数
y1 = [291,391,440,571,830,1287,1975,2744,4515,5974,7711,9692,11791,14411,17205,20438];  % 累计
y2 = [77,149,131,259,444,688,769,1771,1459,1737,1982,2102,2590,2829,3235];              % 新增
figure
plot(x1,y1,x2,y2)
xlabel 天
ylabel 人数
legend('累计人数','新增人数')

accumulate = []; % 累计和新增天数横坐标
add = [];
date = []; % 累计和新增天数横坐标
day_num = 1:33; % 预测的天数;

t1=datetime(2020,1,18);
 
for i = 1:length(x1)
    accumulate = [accumulate t1+caldays(i)];
end
 
for i = 1:length(x2)
    add = [add t1+caldays(i+1)];
end
 
for i=1:33
    date = [date t1+caldays(i)];
end
figure
plot(accumulate,y1,add,y2)
xlabel 天
ylabel 人数
legend('累计人数','新增人数')

order = 4;
p1 =polyfit(x1, y1, order);      % 累计 四次函数
p2 =polyfit(x2, y2, order-1);      % 新增是累计的一阶导数 三次函数
add_new = polyval(p2,day_num); % 预测的新增
total = polyval(p1,day_num); % 累计

figure
plot(date,total,'r')
hold on;
plot(date,add_new,'b')
hold on;
plot(accumulate, y1, '*')
hold on;
plot(add, y2, 'o')
grid on;
% title('拟合次数为4')

最后祝各位读者朋友2020远离疾病、远离灾难,平安渡过2020

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于MATLAB的多项式数据拟合方法研究-毕业论文
摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识。接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识。介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立。具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了MATLAB的
用户1173509
2018/07/04
3.1K0
MATLAB曲线拟合
多项式拟合函数:polyfit。该函数的结果将保证在数据点上拟合值与数据值差的平方和最小,即最小二乘曲线拟合。 调用格式: polyfit(X,Y,n) 执行该函数将产生一个n阶多项式P,并且使得P(X)=Y。
里克贝斯
2021/05/21
1.3K0
MATLAB曲线拟合
利用MATLAB进行曲线拟合
软件环境:MATLAB2013a 一、多项式拟合 多项式拟合是利用多项式最佳地拟合观测数据,使得在观测数据点处的误差平方和最小。 在MATLAB中,利用函数ployfit和ployval进行多项式拟合。 函数ployfit根据观测数据及用户指定的多项式阶数得到光滑曲线的多项式表示,polyfit的一般调用格式为:P = polyfit(x,y,n)。其中x为自变量,y为因变量,n为多项式阶数。 polyval的输入可以是标量或矩阵,调用格式为 pv = polyval(p,a) pv = polyval(p
Zoctopus
2018/06/04
3.5K0
MATLAB-多项式
在 MATLAB 中,多项式用一个行向量表示,行向量的元素值为多项式系数按幂次的降序排列。
用户9925864
2022/07/27
7260
MATLAB-多项式
如何用matlab画函数图_matlab常用画图函数
scatter(X,Y) 简单来用给出X Y的值通过函数便能在该坐标上画出一个圆圈,例如
全栈程序员站长
2022/09/28
11.8K0
如何用matlab画函数图_matlab常用画图函数
matlab中的曲线拟合与插值
曲线拟合与插值 在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。这种方法在下一节讨论。这里讨论的方法是曲线拟合或回归。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。图11.1说明了这两种方法。标有'o'的是数据点;连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合。 11.1 曲线拟合 曲线拟合涉及回答两个基本问题:最佳拟合意味着什么?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线。所以,从这里开始,我们走向何方?正如它证实的那样,当最佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的。数学上,称为多项式的最小二乘曲线拟合。如果这种描述使你混淆,再研究图11.1。虚线和标志的数据点之间的垂直距离是在该点的误差。对各数据点距离求平方,并把平方距离全加起来,就是误差平方和。这条虚线是使误差平方和尽可能小的曲线,即是最佳拟合。最小二乘这个术语仅仅是使误差平方和最小的省略说法。
ccf19881030
2019/04/23
3.4K0
MATLAB基操复习
3. 导数使用diff(f,v,n)对 f(v)=v^{t-1} 求 n 阶导 \frac{d^nf}{d^nv} ,n缺省时,默认为1,diff(f)默认求一阶导数。
Cloud-Cloudys
2020/07/07
1.8K0
利用matlab实现非线性拟合(上)
一般而言,通过已有的数据点去推导其它数据点,常见的方法有插值和拟合。插值适用性较广,尤其是线性插值或样条插值已被广泛的应用。但是通过已知的函数去拟合数据,是连接理论与实验重要的桥梁,这一点是插值无法替代的。
巴山学长
2021/04/22
2.7K0
利用matlab实现非线性拟合(上)
python实现logistic增长模型、多项式模型
比如一个人可以传染三个人,三个人传染九个人,九个人传染27个人,不停的倍增。这就是J型增长,也叫指数型的增长。
悟乙己
2022/11/30
2.5K0
python实现logistic增长模型、多项式模型
matlab插值拟合(二)
上一篇给大家介绍了如何使用matlab拟合工具箱进行函数的插值拟合,今天介绍matlab中常用的拟合函数:polyfit和fittype。
巴山学长
2019/07/15
1.5K0
matlab插值拟合(二)
matlab如何做正交多项式曲线拟合,matlab正交多项式拟合
在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列; 陈章 位; 胡海清 4.在实验模态分析中用 Matlab 实现离散化正交多项式算法 [C], 马永列……
全栈程序员站长
2022/11/16
1.6K0
6.数据分析(1) --描述性统计量和线性回归(2)
前言:在针对非物理信号分析的时候,例如用户数、用户经常出入的地点、疾病感染人数等,这部分涉及到数据分析知识,本文分享一下Matlab常用的描述性统计量函数和线性回归的基本应用。
用户9925864
2022/07/27
7580
6.数据分析(1) --描述性统计量和线性回归(2)
数学建模常用模型02:插值与拟合
拟合:已知有限个数据点,求近似函数,可不过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。
小磊建模
2023/02/11
1.4K0
数学建模常用模型02:插值与拟合
讲解pytho作线性拟合、多项式拟合、对数拟合
拟合(Fitting)是数据分析中常用的一种方法,它可以根据已有的数据,找到最适合这些数据的函数模型。Python提供了丰富的库和工具,可用于进行线性拟合、多项式拟合和对数拟合。本文将讲解如何使用Python实现这些拟合方法。
大盘鸡拌面
2023/12/18
2.4K0
如何使用Python曲线拟合
在Python中进行曲线拟合通常涉及使用科学计算库(如NumPy、SciPy)和绘图库(如Matplotlib)。下面是一个简单的例子,演示如何使用多项式进行曲线拟合,在做项目前首先,确保你已经安装了所需的库。
华科云商小徐
2024/04/12
7790
matlab绘图(六)-图像光滑&数据取点
当然之前中过冷水多次有跟大家提多项式拟合、傅里叶级数拟合、高斯级数拟合,实际更加常见的操作是用matlab中图像拟合工具箱cftool灵活进行函数拟合。
巴山学长
2023/03/15
1.1K0
matlab绘图(六)-图像光滑&数据取点
Python3.0科学计算学习之绘图(一
(1)  plot是标准的绘图库,调用函数plot(x,y)就可以创建一个带有绘图的图形窗口(其中y是x的函数)。输入的参数为具有相同长度的数组(或列表);或者plot(y)是plot(range(len(y)),y)的简写。
py3study
2020/01/16
1.6K0
Python3.0科学计算学习之绘图(一
Matlab-实时编辑器介绍
在实时编辑器中,可以创建随代码一起显示代码输出的实时脚本。添加格式化文本、方程、图像和超链接用于增强记叙脚本,以及将实时脚本作为交互式文档与其他人共享。
用户9925864
2022/07/27
1.2K0
Matlab-实时编辑器介绍
统计回归拟合方程参数
一直以来过冷水都有给大家分享图像拟合的知识、从泰勒级数说傅里叶级数、Matlab多项式拟合初探,本期过冷水给大家讲讲统计回归做拟合。
巴山学长
2020/09/29
4980
统计回归拟合方程参数
Matlab中插值函数汇总和使用说明
MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,'method')           
AIHGF
2019/02/18
5.7K0
Matlab中插值函数汇总和使用说明
相关推荐
基于MATLAB的多项式数据拟合方法研究-毕业论文
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验