import numpy as np %matplotlib inline import matplotlib.pyplot as plt from scipy import integrate from IPython.html.widgets import interact, interactive, fixed from IPython.html import widgets # Hasta ahora, hemos cargado nuestras bibliotecas favoritas de Python # Pasamos a definir nuestro sistema de ec. diferenciales: def DiffEqs(y, t, sigma, gamma, f, beta): """ Modelo simple epidemiológico para la propagacion del virus del Ébola""" # Recuperamos las variables dependientes de entrada S, E, I, R, D = y Nn = S+E+I+R # Total de personas vivas # Definimos las ecuaciones diferenciales dSdt = -beta*(S/Nn)*I dEdt = +beta*(S/Nn)*I - sigma*E dIdt = sigma*E - gamma*I dRdt = (1.0-f)*gamma*I dDdt = f*gamma*I return [dSdt, dEdt, dIdt, dRdt, dDdt] def ebola(tiempo, recortes_sanidad): """ Solve the model and plot a basic graph of the results """ tiempo_simulacion = tiempo # días t = np.linspace(0., tiempo_simulacion, 1000) #------------------------------------------------------------------------------ # Constantes del modelo #------------------------------------------------------------------------------ sigma = 1./9 # Velocidad convertirse en contagioso una vez expuesto gamma = 1./8.5 # Velocidad de recuperación o fallecimiento f = 0.4 # Fracción de gente que no supera la enfermedad (40%) # A mayor nº de recortes, mayor nº de personas contagiadas por infectado R_0 = recortes_sanidad beta = R_0*gamma # Velocidad con la que se propaga la infección # Condiciones iniciales N = 350 # Población total y0 = [N, 1, 0, 0, 0] # [S, E, I, R, D] # Llamamos al ode para resolver las eq. diferenciales solution = integrate.odeint(DiffEqs, y0, t, args=(sigma, gamma, f, beta)) S = solution[:,0] # S es el nº de personas sin infectar E = solution[:,1] # E es el nº de portadores del virus no contagiosos (aún) I = solution[:,2] # I es el nº de personas sintomáticas e infecciosas R = solution[:,3] # R es el nº de personas recuperadas Ds = solution[:,4] # D es el nº de personas fallecidas # Creamos la figura para representar los resultados fig = plt.figure(figsize=(10, 5)) # Representamos las curvas de evolución con respecto al tiempo plt.plot(t, (E+I)/N*100 ) plt.plot(t, I/N*100) plt.plot(t, R/N*100) plt.plot(t, Ds/N*100) plt.plot(t, S/N*100) # Añadimos leyenda a los datos plt.legend(["% infectados", "% infectados contagiosos", "% recuperados", "% fallecidos", u"% población sana "], loc=1) plt.suptitle(u'Variación de la velocidad de propagación del virus del Ébola:', fontsize=14, fontweight='bold') plt.title(u"Impacto de los recortes en el sistema sanitario.", fontsize = 12) plt.text(10, 50, u"A mayor nº de recortes, mayor \n nº de contagios (accidentales) \n y mayor velocidad de propagación.", style='italic', bbox={'facecolor':'red', 'alpha':0.5, 'pad':10}) plt.xlabel(u"tiempo / días") plt.ylabel(u"porcentaje de población") plt.show() interact(ebola, tiempo=(100,600), recortes_sanidad=(1,2,0.01))