美文网首页
基于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