二年级的我来绘制一下SEIR病毒传播曲线图

最近的这个情况大家都很清楚,本来好好的春节,一个可以和同学出去happy的假期只能老老实实当一个肥宅,还是一直肥的那种!!!每天写点代码,追追剧,看看考研复习,另外就是刷B站。这不,今天下午刷到毕导又来教我们二年级的知识。建议大家都先去看看

链接奉上
在这里插入图片描述

重点来了

一开始映入我们眼帘的是他那帅气的脸庞,随着进度条的蠕动,出现的数学公式和各种病毒传播模型使我不禁思索,我真的是大学生吗?大三学过这玩意?哈哈,不开玩笑,第一遍看可能确实有点懵,但是看完后想想还是能慢慢理解的,然后由于毕导从不放代码的缘故,所以大多时候只能把他的结果图截屏,这一次有了时间,正好闲着没事就动手把模型图画出来。
在这里插入图片描述
在这里插入图片描述
大家看完视频,知道了SEIR模型各参数的意义,然后再根据给的微分方程一步步将变化率代入计算,求得明天的值,最后也画出来了这个图。
在这里插入图片描述

代码

很明显,毕导用的是matlab,而我matlab除了数学建模用过几次,基本一直在用python写数据分析之类的,所以这次还是用python

import math
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False

# 首先还是设置一下参数,之后方便修改
N=10000        # 人口总数


E=[]           # 潜伏携带者
E.append(0)

I=[]           # 传染者
I.append(1)

S=[]           # 易感者
S.append(N-I[0])

R=[]           # 康复者
R.append(0)

r=20           # 传染者接触人数
b=0.03         # 传染者传染概率
a=0.1          # 潜伏者患病概率
r2=20          # 潜伏者接触人数
b2=0.03        # 潜伏者传染概率
y=0.1          # 康复概率


T=[i for i in range(0,160)]   # 时间

for i in range(0,len(T)-1):
    S.append(S[i]-r*b*S[i]*I[i]/N-r2*b2*S[i]*E[i]/N)
    E.append(E[i]+r*b*S[i]*I[i]/N-a*E[i]+r2*b2*S[i]*E[i]/N)
    I.append(I[i]+a*E[i]-y*I[i])
    R.append(R[i]+y*I[i])

def plot():
    plt.figure()
    plt.title("SEIR-病毒传播时间曲线")
    plt.plot(T,S,color='r',label='易感者')
    plt.plot(T, E, color='k', label='潜伏者')
    plt.plot(T, I, color='b', label='传染者')
    plt.plot(T, R, color='g', label='康复者')
    plt.grid(False)
    plt.legend()
    plt.xlabel("时间(天)")
    plt.ylabel("人数")
    plt.show()

plot()

并不是很规范,那就改规范点

import math
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False

def calc(T):
    for i in range(0, len(T) - 1):
        S.append(S[i] - r * b * S[i] * I[i] / N - r2 * b2 * S[i] * E[i] / N)
        E.append(E[i] + r * b * S[i] * I[i] / N - a * E[i] + r2 * b2 * S[i] * E[i] / N)
        I.append(I[i] + a * E[i] - y * I[i])
        R.append(R[i] + y * I[i])

def plot(T,S,E,I,R):
    plt.figure()
    plt.title("SEIR-病毒传播时间曲线")
    plt.plot(T,S,color='r',label='易感者')
    plt.plot(T, E, color='k', label='潜伏者')
    plt.plot(T, I, color='b', label='传染者')
    plt.plot(T, R, color='g', label='康复者')
    plt.grid(False)
    plt.legend()
    plt.xlabel("时间(天)")
    plt.ylabel("人数")
    plt.show()

if __name__ == '__main__':
    # 首先还是设置一下参数,之后方便修改
    N = 10000  # 人口总数
    E = []  # 潜伏携带者
    E.append(0)

    I = []  # 传染者
    I.append(1)

    S = []  # 易感者
    S.append(N - I[0])

    R = []  # 康复者
    R.append(0)

    r = 20  # 传染者接触人数
    b = 0.03  # 传染者传染概率
    a = 0.1  # 潜伏者患病概率
    r2 = 20  # 潜伏者接触人数
    b2 = 0.03  # 潜伏者传染概率
    y = 0.1  # 康复概率

    T = [i for i in range(0, 160)]  # 时间
    calc(T)
    plot(T,S,E,I,R)

这样代码就好看多了

最后

身为一个武汉大学生,还是希望武汉能早点恢复过来的,武汉加油,中国加油!!! 另外大家也可以查查资料,用更准确的数据去绘制模型,看看模型到底准确性如何。

  • 17
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
本文基于传统的传染病模型,以微分方程的方法作为理论基础,结合采取的措施不同的情况,用MATLAB软件拟合出患者人数与时间的曲线关系,从中得出应采取的相应的应对措施。 在考虑地区总人数不变,人群被分为五类:确诊患者、疑似患者、治愈者、死亡和正常人,再将这几类分为可传染性和不可传染性两种。我们找出单位时间内正常人数的变化、单位时间内潜伏期病人数的变化、单位时间内确诊患者人数的变化、单位时间内退出的人数的变化、单位时间内疑似患者人数的变化等关系建立微分方程模型,得到病毒扩散与传播的控制模型。 在此基础上,我们将所要求的问题带入模型得到患者人数随时间变化的曲线图,根据这图形得出模型结果的变化。这样一来就可根据这结果的变化得出相应的应对措施。 此外对该传染病的潜伏期及治愈期进行了灵敏度分析,发现潜伏期的变化会对整个模型的结果产生较大影响,而治愈期的变化只会使传染病的持续时间缩短,但对累积的患病人数影响不大。 应尽量避免患者与正常人接触,减少正常人患病的可能性;加大隔离措施强度;减少拖延患者去住院的时间,让患者及时住院治疗。养成良好的卫生习惯,保证科学睡眠,适当锻炼,减少压力,保证营养,增强个人抵抗力,降低被病毒感染的危险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shelgi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值