У меня завтра экзамен, и я хотел сделать модель апокалипсиса зомби, используя модель эпидемий SIR. Программа работает на значения примерно до 300 000+, но помимо этого сюжет становится иррациональным. Когда программа работает, количество зараженных уровней выходит на количество людей, восприимчивых к заражению, но когда оно достигает значений более 300 000 (приближение), график зараженных, кажется, намного превышает график числа восприимчивых.
Вполне возможно, что это из-за размера вычислений и что программа не может правильно с ними справиться. Как вы можете видеть в цикле 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()