使用numpy和matplotlib绘制某些值时遇到麻烦

时间:2019-06-05 14:46:19

标签: python numpy matplotlib

明天我要进行一次考试,并想使用流行病的SIR模型制作一个僵尸启示录的模型。该程序适用于高达300 000 +的值,但除此之外,情节变得不合理。当该程序运行时,受感染的数量与易受感染的人数成正比,但是当达到30万以上(近似值)时,受感染的人数似乎远远超过了易受感染人数的人数。

这完全有可能是由于计算的大小,并且程序无法正确处理它们。正如您在for循环中看到的那样,最终每个类的值(sus,inf)将变得非常大,并且我怀疑当这些值相乘时可能会引起麻烦。也可能是我误解或忽视了某些东西,我们将不胜感激。

import numpy as np
import matplotlib.pyplot as plt 
xmin=0
xmax=365

deltax=0.1

antall_punkt=int((xmax-xmin)/deltax)+1
x=np.zeros(antall_punkt)

sus=np.zeros(len(x))
inf=np.zeros(len(x))
rec=np.zeros(len(x))

x[0]=0
sus[0]=500000
inf[0]=1
rec[0]=0
a=0.00001
b=0
total_inf=1
for i in range(0, len(sus)-1):
    if i>90:
        b=inf[i-90]/total_inf

    sus[i+1]=sus[i]+deltax*(-a*sus[i]*inf[i])
    if sus[i+1]<0:
        sus[i+1]=0
    inf[i+1]=inf[i]+deltax*(a*sus[i]*inf[i] -b*inf[i])
    if inf[i+1]>sus[0]:
        inf[i+1]=sus[0]
    total_inf+=inf[i]
    rec[i+1]=rec[i]+deltax*(b*inf[i])
    x[i+1]=x[i]+deltax
print(sus[3])
print(inf[4])
print(inf[3])
print(total_inf)
plt.plot(x,sus)
plt.plot(x,inf)
plt.plot(x,rec)
plt.show()

0 个答案:

没有答案