python 如何用指数函数拟合数据?(2020年新型冠状病毒感染人数预测)

# -*- coding: utf-8 -*-
"""
@File    : 200124_指数曲线拟合.py
@Time    : 2020/1/24 22:26
@Author  : Dontla
@Email   : [email protected]
@Software: PyCharm
"""
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np


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


xdata = np.array([18, 19, 20, 21, 22, 23])
ydata = np.array([196, 239, 294, 444, 590, 850])
plt.plot(xdata, ydata, 'b-')
popt, pcov = curve_fit(func, xdata, ydata)

y2 = [func(i, popt[0], popt[1], popt[2]) for i in np.linspace(19, 31, 50)]
plt.plot(np.linspace(19, 31, 50), y2, 'r--')
# print(popt)
plt.show()

for date in range(24, 31):
    print("{}日:{:.0f}".format(date, func(date, popt[0], popt[1], popt[2])))

结果:
在这里插入图片描述

D:\Yolov3_Tensorflow\python\python.exe D:/20200123_华为笔记本_pycharm测试项目/20200123_测试卷积计算/200124_指数曲线拟合.py
24日:1237
25日:1822
26日:2705
27日:4041
28日:6061
29日:9113
30日:13728

可见,如果病毒没控制住,传播将是非常迅速的

20200125

今日官方发布冠状病毒确诊人数1287例,与我们拟合曲线预测的1237例相差不大

但也有网友指出,使用Sigmoid函数拟合较为合适,我也这样认为

病毒感染初期,感染人数增长率不断增加,受制于人口总数上限或其他因素,在到达一定阶段后,感染人数增长率才开始下降

1918年西班牙大流感,当时全球共17亿人口,约10亿人感染了流感病毒,死亡约4000万人,我不知道当时为什么感染停滞了,希望此次不要重蹈覆辙,特别是在网络如此发达的今天

参考文章1:对python指数、幂数拟合curve_fit详解

参考文章2:如何在Python中做指数和对数曲线拟合?我发现只有多项式拟合

发布了771 篇原创文章 · 获赞 32 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Dontla/article/details/104081795