美文网首页
基于python实现简单的传染病模型

基于python实现简单的传染病模型

作者: 一个黑客创业者 | 来源:发表于2024-03-13 15:58 被阅读0次

import numpyas np

from scipy.integrateimport odeint

import matplotlib.pyplotas plt

# 设置Matplotlib以支持中文显示

plt.rcParams['font.sans-serif'] = ['SimHei']# 设置中文字体为黑体,确保支持中文

plt.rcParams['axes.unicode_minus'] =False  # 正确显示负号

# SIR模型参数

N =10099 # 总人口

I0 =1  # 初始感染者人数

R0 =2  # 初始康复者人数

S0 = N - I0 - R0# 初始易感者人数

beta =0.2  # 感染率

gamma =0.1  # 康复率

# SIR模型的微分方程

def deriv(y,t, N, beta, gamma):

S, I, R = y

dSdt = -beta * S * I / N

dIdt = beta * S * I / N - gamma * I

dRdt = gamma * I

return dSdt, dIdt, dRdt

# 初始条件向量

y0 = S0, I0, R0

# 时间点(以天为单位)

t = np.linspace(0,160,160)

# 集成SIR方程

ret = odeint(deriv, y0, t,args=(N, beta, gamma))

S, I, R = ret.T

# 绘制结果

fig, ax = plt.subplots()

ax.plot(t, S /1000,'b',alpha=0.5,lw=2,label='易感者(千人)')

ax.plot(t, I /1000,'r',alpha=0.5,lw=2,label='感染者(千人)')

ax.plot(t, R /1000,'g',alpha=0.5,lw=2,label='康复者(千人)')

ax.set_xlabel('时间 /天')

ax.set_ylabel('人数(千人)')

ax.set_title('SIR模型模拟结果')

ax.tick_params(axis='x',labelsize=10,labelcolor='b')

ax.tick_params(axis='y',labelsize=10,labelcolor='b')

ax.yaxis.set_tick_params(length=0)

ax.xaxis.set_tick_params(length=0)

ax.grid(True,which='major',c='w',lw=2,ls='-')

ax.legend()

for spinein ('top','right','bottom','left'):

ax.spines[spine].set_visible(False)

plt.show()

SIR模型模拟结果

相关文章

网友评论

      本文标题:基于python实现简单的传染病模型

      本文链接:https://www.haomeiwen.com/subject/bscizdtx.html