Week 8: Class Exercise solutions ================================ Exercise: SIR disease model I ----------------------------- :: # Step 1 dt = 1 niter = 60 timesteps = np.arange(0, niter, dt) # Step 2 N = 1e6 beta = 1 gamma = 0.3 # Step 3 S = np.zeros(shape=(niter, )) I = np.zeros(shape=(niter, )) R = np.zeros(shape=(niter, )) # Step 4 S[0] = 1 - 100/N I[0] = 100/N # Step 5 for i in range(1, niter): dSdt = - beta * I[i-1] * S[i-1] dIdt = beta * I[i-1] * S[i-1] - gamma * I[i-1] dRdt = gamma * I[i-1] S[i] = S[i-1] + dSdt * dt I[i] = I[i-1] + dIdt * dt R[i] = R[i-1] + dRdt * dt # Step 6 plt.plot(timesteps, S, label="S") plt.plot(timesteps, I, label="I") plt.plot(timesteps, R, label="R") plt.legend() plt.show() Exercise: SIR disease model II ------------------------------ :: # Step 1 intervention = 15 # Step 2 beta = np.ones(shape=(niter, )) * 1 beta[intervention:] = beta[intervention:] * 0.5 dt = 1 niter = 60 timesteps = np.arange(0, niter, dt) N = 1e6 # beta = 1 gamma = 0.3 S = np.zeros(shape=(niter, )) I = np.zeros(shape=(niter, )) R = np.zeros(shape=(niter, )) S[0] = 1 - 100/N I[0] = 100/N # Step 3 for i in range(1, niter): # dSdt = - beta * I[i-1] * S[i-1] # dIdt = beta * I[i-1] * S[i-1] - gamma * I[i-1] dSdt = - beta[i] * I[i-1] * S[i-1] dIdt = beta[i] * I[i-1] * S[i-1] - gamma * I[i-1] dRdt = gamma * I[i-1] S[i] = S[i-1] + dSdt * dt I[i] = I[i-1] + dIdt * dt R[i] = R[i-1] + dRdt * dt plt.plot(timesteps, S, label="S") plt.plot(timesteps, I, label="I") plt.plot(timesteps, R, label="R") plt.legend() plt.show() Exercise: SIR disease model III ------------------------------- :: # Step 1 recurrence = 0.2 dt = 1 niter = 60 timesteps = np.arange(0, niter, dt) N = 1e6 beta = 1 gamma = 0.3 S = np.zeros(shape=(niter, )) I = np.zeros(shape=(niter, )) R = np.zeros(shape=(niter, )) S[0] = 1 - 100/N I[0] = 100/N # Step 2 for i in range(1, niter): # dSdt = - beta * I[i-1] * S[i-1] dSdt = - beta * I[i-1] * S[i-1] + recurrence * R[i-1] dIdt = beta * I[i-1] * S[i-1] - gamma * I[i-1] # dRdt = gamma * I[i-1] dRdt = gamma * I[i-1] - recurrence * R[i-1] S[i] = S[i-1] + dSdt * dt I[i] = I[i-1] + dIdt * dt R[i] = R[i-1] + dRdt * dt plt.plot(timesteps, S, label="S") plt.plot(timesteps, I, label="I") plt.plot(timesteps, R, label="R") plt.legend() plt.show()