간단한 SIQR 모델 표시
16325 단어 코로나 바이러스SIR 모델Python3matplotlib
다음 기사를 바탕으로 했습니다.
신형 코로나 바이러스의 만연에 관한 일고찰
격리율 0.0의 경우
격리율 0.1의 경우
siqr01.py
#! /usr/bin/python
#
# siqr01.py
#
# May/14/2020
#
# ------------------------------------------------------------------
import matplotlib.pyplot as plt
import numpy as np
import sys
# ------------------------------------------------------------------
def plot_graph(period,r0,p_kakuri,l_ss,l_ii,l_qq,l_rr):
plt.rcParams["font.family"] = "TakaoExGothic"
# plt.rcParams["font.family"] = "IPAGothic"
plt.figure()
str_out = "基本再生産数 : {}".format(format(r0,".3f"))
str_out += " "
str_out += "隔離率 : {}".format(format(p_kakuri,".3f"))
plt.title(str_out)
plt.xlabel('時間')
plt.ylabel('比率')
x = np.linspace(0, 100, period+1)
plt.plot(x, l_ss, label="未感染者")
plt.plot(x, l_ii, label="感染 非隔離者")
plt.plot(x, l_qq, label="感染 隔離者")
plt.plot(x, l_rr, label="回復者")
plt.legend()
plt.show()
# ------------------------------------------------------------------
def next_state(beta,nu,p_kakuri,ss, ii, qq, rr):
q_kakuri = 0.0
beta_ss_ii = beta * ss * ii
delta_ss = - beta_ss_ii
delta_ii = (1 - qq) * beta_ss_ii - p_kakuri * ii - nu * ii
delta_qq = q_kakuri * beta_ss_ii + p_kakuri * ii - nu * qq
delta_rr = nu * ii + nu * qq
ss = ss + delta_ss
ii = ii + delta_ii
qq = qq + delta_qq
if ss < 0:
ss = 0
if 1.0 < ii:
ii = 1.0
rr = 1.0 - ss - ii - qq
#
return ss, ii, qq, rr
#
# ------------------------------------------------------------------
def calc_proc(beta,nu,p_kakuri,period):
#
ii = 0.01
qq = 0
rr = 0
ss = 1 - ii - rr
l_ss = [ss]
l_ii = [ii]
l_qq = [qq]
l_rr = [rr]
r0 = beta*ss/nu
for t in range(period):
ss, ii, qq, rr = next_state(beta,nu,p_kakuri,ss, ii, qq, rr)
l_ss.append(ss)
l_ii.append(ii)
l_qq.append(qq)
l_rr.append(rr)
#
return r0,l_ss,l_ii,l_qq,l_rr
#
# ------------------------------------------------------------------
sys.stderr.write("*** start ***\n")
beta = 0.5
nu = 0.3
p_kakuri = 0.0
period = 100
#
sys.stderr.write("beta = %f\n" % beta)
sys.stderr.write("nu = %f\n" % nu)
sys.stderr.write("p_kakuri = %f\n" % p_kakuri)
#
r0,l_ss,l_ii,l_qq,l_rr = calc_proc(beta,nu,p_kakuri,period)
plot_graph(period,r0,p_kakuri,l_ss,l_ii,l_qq,l_rr)
#
p_kakuri = 0.1
sys.stderr.write("p_kakuri = %f\n" % p_kakuri)
r0,l_ss,l_ii,l_qq,l_rr = calc_proc(beta,nu,p_kakuri,period)
plot_graph(period,r0,p_kakuri,l_ss,l_ii,l_qq,l_rr)
#
sys.stderr.write("*** end ***\n")
# ------------------------------------------------------------------
Reference
이 문제에 관하여(간단한 SIQR 모델 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ekzemplaro/items/f8d7613f9f407ab8c118텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)