こちらは以下のサイトの例題3.1に基づき書いたプログラムです。そして例題3.2のワクチンのプログラムについて書き換えたいです。助けてください。
リンク内容
import
1from matplotlib import rcParams 2 3 4import matplotlib.pyplot as plt 5from scipy. integrate import odeint 6 7#sirモデルの常微分方程式 8 9def SIR_equation(v,t,β,γ): 10 S, I, R =v 11 dSdt=-β*S*I 12 dIdt=β*S*I-γ*I 13 dRdt=γ*I 14 return [dSdt,dIdt,dRdt] 15for β in np.linspace(0.10,0.20,11): 16 for γ in np.linspace(0.10,0.20,11): 17 18 19#初期値設定 20 S0=.999999928 21 I0=.000000071 22 R0=0.0 23#係数決定 24 25 26#0 ≦t ≦100のあいだを1000分割 27 time_list=np.linspace(1,150,150) 28 29 var_list=odeint( 30 SIR_equation, 31 [S0,I0,R0], 32 time_list, 33 args=(β,γ) 34) 35#微分方程式をここまでで解いた 36#var_listにはS、I、Rのそれぞれの時間に対する結果が配列で入っているので、 37#それらを分けて配列(_1ist)に収納 38 S_list = var_list [:,0] 39 I_list = var_list [:,1] 40 R_list = var_list [:,2] 41 tot_list = S_list + I_list + R_list 42 43#精題にプロットできるよう色々工夫してみる 44 45 plt.xlabel("time") 46 plt.xlim(1,150) 47 plt.ylim(0,0.0004) 48 plt.ylabel("population ratio") 49 plt.fill_between(time_list, tot_list,label ="population",alpha = 0.5) 50 #plt.fill_between(time_list, S_list,label = "Susceptible",alpha = 0.5) 51 #plt.fill_between(time_list, R_list,label = "Recovered",alpha = 0.5) 52 plt.fill_between(time_list, I_list,label="Infected",alpha = 0.5) 53 plt.fill_between(time_list, I_list+R_list,label="Infected(cumulative)",alpha = 0.5) 54 55 56 plt.legend(loc ='center right') 57 plt.title(r"SIR model ($\beta=%.2f,\gamma=%.2f$)"%(β,γ)) 58 plt.savefig(r"SIR_model_beta=%.2f_gamma=%.2f.png"%(β,γ)) 59 plt.close()
あなたの回答
tips
プレビュー