本文主要是介绍二年级的我来绘制一下SEIR病毒传播曲线图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近的这个情况大家都很清楚,本来好好的春节,一个可以和同学出去happy的假期只能老老实实当一个肥宅,还是一直肥的那种!!!每天写点代码,追追剧,看看考研复习,另外就是刷B站。这不,今天下午刷到毕导又来教我们二年级的知识。建议大家都先去看看
链接奉上
重点来了
一开始映入我们眼帘的是他那帅气的脸庞,随着进度条的蠕动,出现的数学公式和各种病毒传播模型使我不禁思索,我真的是大学生吗?大三学过这玩意?哈哈,不开玩笑,第一遍看可能确实有点懵,但是看完后想想还是能慢慢理解的,然后由于毕导从不放代码的缘故,所以大多时候只能把他的结果图截屏,这一次有了时间,正好闲着没事就动手把模型图画出来。
大家看完视频,知道了SEIR模型各参数的意义,然后再根据给的微分方程一步步将变化率代入计算,求得明天的值,最后也画出来了这个图。
代码
很明显,毕导用的是matlab,而我matlab除了数学建模用过几次,基本一直在用python写数据分析之类的,所以这次还是用python
import math
import numpy as np
import matplotlib
import matplotlib.pyplot as pltplt.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 pltplt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = Falsedef 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)
这样代码就好看多了
最后
身为一个武汉大学生,还是希望武汉能早点恢复过来的,武汉加油,中国加油!!! 另外大家也可以查查资料,用更准确的数据去绘制模型,看看模型到底准确性如何。
这篇关于二年级的我来绘制一下SEIR病毒传播曲线图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!