Diferencia entre revisiones de «Modelo para epidemias. Grupo 6-C»

De MateWiki
Saltar a: navegación, buscar
 
(No se muestran 72 ediciones intermedias del mismo usuario)
Línea 3: Línea 3:
 
Alberto Jordá Laguna<br />
 
Alberto Jordá Laguna<br />
 
Pablo Molinero Brito<br /> }}
 
Pablo Molinero Brito<br /> }}
 +
 +
 +
 +
  
 
== Introducción==
 
== Introducción==
Línea 30: Línea 34:
  
 
Además sabemos que los servicios de salud pública registran la difusión de una epidemia de gripe de duración particularmente larga en una ciudad de 500 000 personas. Al inicio de la primera semana de registro se habían contabilizado 200 casos; durante la primera semana aparecieron 300 nuevos casos.  
 
Además sabemos que los servicios de salud pública registran la difusión de una epidemia de gripe de duración particularmente larga en una ciudad de 500 000 personas. Al inicio de la primera semana de registro se habían contabilizado 200 casos; durante la primera semana aparecieron 300 nuevos casos.  
 +
 +
Sabiendo que 'c' tiene valores entre 0.01 y 0.99, hemos creado un bucle que  pasa por cada uno de esos valores, guardando en un vector la condición de |I(primera semana) - 500|, se ha representado gráficamente en comparación con todos los valores posibles de 'c' y también hemos obtenido la solución de forma numérica de cómo varía según la condición.
  
 
Para obtener el número de contactos utilizaremos el siguiente método númerico, el cual está basado en el método de Euler.
 
Para obtener el número de contactos utilizaremos el siguiente método númerico, el cual está basado en el método de Euler.
Línea 57: Línea 63:
 
}}
 
}}
  
Al ejecutar el programa obtenemos el siguiente gráfico que representa la evolución del error que se produce para cada valor de c. Y se obtiene el valor de c que minimiza el error el cual es igual a 0,92.
+
Al ejecutar el programa obtenemos el siguiente gráfico que representa la evolución del error que se produce para cada valor de 'c' . Y se obtiene el valor de 'c' que minimiza el error el cual es igual a 0,92.
  
 
[[Archivo:EpidemiaEuler.jpg]]
 
[[Archivo:EpidemiaEuler.jpg]]
Línea 63: Línea 69:
 
==Evolución de los Infectados por la Epidemia==
 
==Evolución de los Infectados por la Epidemia==
  
Para determinar la evolución de los infectados por la epidemia conforme avanza el tiempo, emplearemos el método de Hern y el método de Runge Dutta de orden 4.
+
Para determinar la evolución de los infectados por la epidemia conforme avanza el tiempo, emplearemos el método de Heun y el método de Runge Kutta de orden 4.
  
Método de Heun:
+
'''Método de Heun:'''
  
 
[[Archivo:MétodoHeun.png]]
 
[[Archivo:MétodoHeun.png]]
  
Método Runge-Kutta:
+
'''Método de Runge-Kutta:'''
  
 
[[Archivo:MétodoRungeKutta.png]]
 
[[Archivo:MétodoRungeKutta.png]]
  
 +
Mediante los métodos expuestos, el de Heun y Runge-Kutta, podemos determinar la evolución que experimentan los infectados a lo largo de las semanas. Dicha Evolución la vamos a representar gráficamente mediante el siguiente código empleado en MATLAB:
  
==2a Parte: Modelo SIR==
+
[[File:GráficaHeunRunge-Kutta.jpg|600px|thumb|rigth|Evolución de la epidemia a lo largo del tiempo]]
 +
 
 +
{{matlab|codigo=
 +
t0=0;
 +
h=0.01;
 +
z=[]; %Heun
 +
y=[]; %Runge-Kutta
 +
y0=200;
 +
z0=200;
 +
y(1)=y0;
 +
z(1)=z0;
 +
c =0.92;
 +
N=500000; %Población total en el lugar de estudio
 +
for i=1:N;
 +
while y<400000 & z<400000
 +
% Método de Heun
 +
K1H=(c*z(i))/N*(N-z(i));
 +
K2H=(c*(z(i)+K1H*h))/N*(N-(z(i)+K1H*h));
 +
z(i+1)=z(i)+(h/2)*(K1H+K2H);
 +
 
 +
%Método de Runge Kutta
 +
k1=(c*y(i))/N*(N-y(i));
 +
k2=(c*(y(i)+1/2*k1*h))/N*(N-(y(i)+1/2*k1*h));
 +
k3=(c*(y(i)+1/2*k2*h))/N*(N-(y(i)+1/2*k2*h));
 +
k4=(c*(y(i)+k3*h))/N*(N-(y(i)+h*k3));
 +
y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4);
 +
i=i+1;
 +
end
 +
end
 +
%Discretización variable independiente
 +
tN1=h*(length(y)-1);
 +
tN2=h*(length(z)-1);
 +
ty=t0:h:tN1;
 +
tz=t0:h:tN2;
 +
 
 +
Semana_maxima_infeccion=[ty(end) tz(end)]
 +
ValorAproximado=[y(6/h),z(6/h)] %valor aproximado de infectados pasadas 6 semanas
 +
hold on
 +
%gráfica Runge-Kutta
 +
plot(ty,y,'b')
 +
%gráfica Heun
 +
plot(tz,z,'r')
 +
xlabel('Tiempo en semananas');
 +
ylabel('Número de infectados');
 +
legend('Runge Kutta','Heun','Location','best')
 +
hold off
 +
}}
 +
 
 +
[[Archivo:GráficaRungeKutta-Heun.jpg]]
 +
 
 +
Tal y cómo se puede apreciar en los gráficos adjuntos, el número de infectados es siempre creciente y lo hace de forma exponencial, de manera que el número de infectados seguirá aumentando hasta llegar a contagiar a toda la población, que en nuestro caso es de 500.000 habitantes. Al tratarse de una función exponencial que está acotada se comprueba la veracidad del máximo anteriormente dicho (500.000 habitantes).
 +
 
 +
También se aprecia que hay muy poca diferencia entre las gráficas obtenidas por Heun y Runge-Kutta, de hecho, para ver de forma más clara la diferencia entre éstas, hemos tenido que aumentar hasta el orden de la diezmilésima en el eje de las X y teniendo en cuenta que la unidad es la semana.
 +
 
 +
Además de las gráficas, el código nos devuelve el número de infectados pasadas 6 semanas y el tiempo que pasa hasta llegar a 400.000 personas infectadas.
 +
 
 +
'''-Utilizando el método de Heun:'''
 +
 
 +
A las 6 semanas hay 45.029 infectados. Se llega a los 400.000 infectados pasadas 10 semanas y un día y medio aproximadamente.
 +
 
 +
'''-Utilizando el método de Runge-Kutta:'''
 +
 
 +
A las 6 semanas hay 45.032 infectados. Se llega a los 400.000 infectados pasadas 10 semanas y un día y medio aproximadamente.
 +
 
 +
Ahora, podríamos pensar en poblaciones tales que si el número de individuos N es elevado entonces la tasa es decreciente, y que si la población en un determinado momento M es demasiado pequeña esta tasa también decrece (por ejemplo, por la dificultad de individuos a los que contagiar los infectados).
 +
Para ello debemos modificar la ecuación logística por:
 +
\[ I'=c \cdot I \cdot \left(1-\displaystyle\frac{I}{N} \right) \cdot \left(\displaystyle\frac{I}{M} -1 \right) \]
 +
Ahora, utilizando el método de Heun, con longitud de paso H=0.01 y humbral M=10000, vamos a determinar las g´raficas de evolución de infectados, para los casos I(0)=9700,10200 y 30000.
 +
{{matlab|codigo=
 +
N= 500000; % población total
 +
M= 10000; % umbral de población
 +
c=0.92; % coef de contagio
 +
ti=0; tf=10; % hacemos la g´rafica par aun período de 10 semanas
 +
h=0.01;
 +
t= ti:h:tf;
 +
k=(tf-ti)/h;
 +
I1=zeros(1,k+1);
 +
I10=9700;
 +
I1(1)=I10;
 +
 
 +
for i=1:k
 +
    K1 = (c*I1(i))/N*(N-I1(i))*((I1(i)/M)-1);
 +
    K2 = (c*(I1(i)+K1*h))/N*(N-(I1(i)+K1*h))*(((I1(i)+K1*h)/M)-1);
 +
    I1(i+1) = I1(i) + (h/2)*(K1+K2);
 +
end
 +
I2=zeros(1,k+1);
 +
I20=10200;
 +
I2(1)=I20;
 +
 +
for j=1:k
 +
    L1 = (c*I2(j))/N*(N-I2(j))*((I2(j)/M)-1);
 +
    L2 = (c*(I2(j)+L1*h))/N*(N-(I2(j)+L1*h))*(((I2(j)+L1*h)/M)-1);
 +
    I2(j+1) = I2(j) + (h/2)*(L1+L2);
 +
end
 +
I3=zeros(1,k+1);
 +
I30=30000;
 +
I3(1)=I30;
 +
 
 +
for l=1:k
 +
    P1 = (c*I3(l))/N*(N-I3(l))*((I3(l)/M)-1);
 +
    P2 = (c*(I3(l)+K1*h))/N*(N-(I3(l)+P1*h))*(((I3(l)+P1*h)/M)-1);
 +
    I3(l+1) = I3(l) + (h/2)*(P1+P2);
 +
end
 +
hold on
 +
plot(t,I1)
 +
plot(t,I2,'y')
 +
plot(t,I3,'m')
 +
legend('Io=9700','Io=10200','Io=30000','location','best')
 +
hold off
 +
}}
 +
 
 +
[[Archivo:Ultimaimagen.jpg|400px|thumb|right|Grafica de la evolucion de los infectados para los diferentes I(0)]]
 +
[[Archivo:EvoluciondifI0.jpg|400px|thumb|left|Estudio del nuevo modelo para distintas condiciones inciales por separado.]]
 +
 
 +
 
 +
Los infectados solo tienden a desaparecer en el único caso en el que I(0)<M, es decir en el que I(0)=9700. En este caso el máximo está al principio. En los otros dos casos, el número de infectados crece con el tiempo, en el caso de I(0)=10200 el máximo se alcanza en la semana 4 y en el caso de I(0)=30000 se alcanza en la semana  1
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
==Segunda Parte: Modelo SIR==
 
Ahora vamos a usar un modelo más general para estudiar la enfermedad, que divide la población total N en susceptibles de ser infectados(S), infectados(I), y removidos, que agrupa tanto a los curados como a los muertos (R). Así, el modelo, que tiene tres incógnitas, S(t), I(t) y R(t), y llamando r a la tasa de infección y a a la de remoción, lo podemos escribir:
 
Ahora vamos a usar un modelo más general para estudiar la enfermedad, que divide la población total N en susceptibles de ser infectados(S), infectados(I), y removidos, que agrupa tanto a los curados como a los muertos (R). Así, el modelo, que tiene tres incógnitas, S(t), I(t) y R(t), y llamando r a la tasa de infección y a a la de remoción, lo podemos escribir:
[[Archivo:Imagen2.1.png|200px|thumb|left|Modelo SIR]]
+
[[Archivo:Imagen2.1.png|400px|thumb|left|Modelo SIR]]
 +
 
 +
===Demostración de que <math> S\left ( t \right )+I\left (t\right )+R\left ( t\right )=N </math>===
  
===Demostración de que S\left ( t \right )+I\left (t\right )+R\left ( t\right )=N===
 
 
Sumando la variación de los susceptibles, los infectados y los removidos, vemos que esta es igual a 0, lo que nos quiere decir que la población total N es constante:
 
Sumando la variación de los susceptibles, los infectados y los removidos, vemos que esta es igual a 0, lo que nos quiere decir que la población total N es constante:
\frac{\partial S}{\partial t}+\frac{\partial I}{\partial t}+\frac{\partial R}{\partial t}= S’\left ( t \right )+I’\left (t\right )+R’\left ( t\right )\left ( -rSI \right )+\left ( rSI-aI \right )+\left ( aI\right )=0,
+
 
Además, si sumamos sus valores iniciales vemos que estos son igual a la población total, y al ser ésta constante, vemos que se demuestra el enunciado inicial
+
<math> \frac{\partial S}{\partial t}+\frac{\partial I}{\partial t}+\frac{\partial R}{\partial t}= S’\left ( t \right )+I’\left (t\right )+R’\left ( t\right )\left ( -rSI \right )+\left ( rSI-aI \right )+\left ( aI\right )=0 </math>
S\left ( 0 \right )+I\left (0\right )+R\left ( 0\right )=N
+
 
 +
Además, si sumamos sus valores iniciales vemos que estos son igual a la población total, y al ser ésta constante, vemos que se demuestra el enunciado inicial:
 +
 
 +
<math> S\left ( 0 \right )+I\left (0\right )+R\left ( 0\right )=N </math>
 +
 
 
===Demostraciones analíticas con la tasa de remoción relativa===
 
===Demostraciones analíticas con la tasa de remoción relativa===
[[Archivo:Imagen2.2.1.png|200px|thumb|right|Primera demostración del apartado 4.2]]
+
 
[[Archivo:Imagen2.2.2.png|200px|thumb|right|Segunda demostración del apartado 4.3]]
+
[[Archivo:Imagen2.2.1.png|400px|thumb|right|Primera demostración del apartado 4.2]]
Llamamos tasa de remoción relativa a: \rho =\frac{r}{a}
+
[[Archivo:Imagen2.2.2.png|400px|thumb|right|Segunda demostración del apartado 4.3]]
Vamos a demostrar que si dicha tasa es mayor o igual que el número de personas susceptibles iniciales, S\left ( 0 \right ), no hay epidemia, ya que el número de infectados no aumenta:
+
 
 +
Llamamos tasa de remoción relativa a: <math> \rho =\frac{r}{a} </math>
 +
Vamos a demostrar que si dicha tasa es mayor o igual que el número de personas susceptibles iniciales, <math> S\left ( 0 \right ) </math>, no hay epidemia, ya que el número de infectados no aumenta.
 
También vamos a demostrar que, si dicha tasa es menor que la población susceptible inicial, habrá epidemia, pues aumentarán el número de infectados:
 
También vamos a demostrar que, si dicha tasa es menor que la población susceptible inicial, habrá epidemia, pues aumentarán el número de infectados:
  
Línea 158: Línea 298:
 
A continuacion mostramos las gráficas obtenidas, para todas r=0,0000218 a=0,341:
 
A continuacion mostramos las gráficas obtenidas, para todas r=0,0000218 a=0,341:
  
[[Archivo:Graficoo2.1.jpg|400px|thumb|left|Caso 1:S(0)=159985, I(0)=15, h=0,1, 4 semanas]]
+
 
[[Archivo:Graficoo2.2.jpg|200px|thumb|center|Caso 1:S(0)=159985, I(0)=15, h=0,1 20 semanas]]
+
{|
[[Archivo:Graficoo2.3.jpg|200px|thumb|right|Caso 1:S(0)=159985, I(0)=15, h=0,01 4 semanas]]
+
|-
 +
| [[Archivo:Graficoo2.1.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,1, 4 semanas]] || [[Archivo:Graficoo2.2.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,1, 20 semanas]] || [[Archivo:Graficoo2.3.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,01, 4 semanas]]
 +
|}
 +
{|
 +
|-
 +
| [[Archivo:Graficoo2.4.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,01 20 semanas]] || [[Archivo:Graficoo2.5.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,001, 4 semanas]] || [[Archivo:Graficoo2.6.jpg|thumb|475px|left|Caso 1:S(0)=159985, I(0)=15, h=0,001, 20 semanas]]
 +
|}
 +
 
 +
{|
 +
|-
 +
| [[Archivo:Graficoo2.7.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,1, 4 semanas]] || [[Archivo:Graficoo2,8.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,1, 20 semanas]] || [[Archivo:Graficoo2.9.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,01, 4 semanas]]
 +
|}
 +
{|
 +
|-
 +
| [[Archivo:Graficoo2.10.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,01, 20 semanas]] || [[Archivo:Graficoo2.11.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,001, 4 semanas]] || [[Archivo:Graficoo2.12.jpg|thumb|475px|left|Caso 2:S(0)=140000, I(0)=20000, h=0,001, 20 semanas]]
 +
|}
 +
{|
 +
|-
 +
| [[Archivo:Graficoo2.13.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,1, 4 semanas]] || [[Archivo:Graficoo2.14.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,1, 20 semanas]] || [[Archivo:Graficoo2.15.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,01, 4 semanas]]
 +
|}
 +
 
 +
{|
 +
|-
 +
| [[Archivo:Graficoo2.16.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,01, 20 semanas]] || [[Archivo:Graficoo2.17.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,001, 4 semanas]] || [[Archivo:Graficoo2.18.jpg|thumb|475px|left|Caso 3:S(0)=159999, I(0)=1, h=0,001, 20 semanas]]
 +
|}
 +
 
 +
Como se puede observar en las diferentes gráficas, cuanto menor es el tamaño de paso mas aproximado es el método, siéndolo el que más el de Runge-Kutta que además es el único de orden 4.
 +
 
 +
==Interpretación de la epidemia y justificación de parámetros==
 +
 
 +
Consideraremos que la epidemia ha finalizado cuando el número de infectados deja de crecer, es decir, cuando la función I(t) alcanza su máximo absoluto. Podemos ver claramente que todos los casos corresponden a modelos de epidemias, ya que siempre se cumple que los distintos valores de  <math> S_0 </math> son superiores al coeficiente de la tasa de remoción relativa <math>(\rho = \frac{a}{r} ) </math>.
 +
 
 +
En los tres casos que se nos plantean con distintos valores iniciales vemos que el número e individuos susceptibles a infectarse (S) se va reduciendo a medida que los individuos infectados (I) e individuos removidos (R) va aumentando, por lo que las variables que hemos utilizado se ajusta a los valores numéricos.
 +
 
 +
Si vemos en un periodo medio de infección que se encontraría alrededor de tres semanas se puede apreciar cambios en todos los casos ya sea porque el número de susceptibles empiece a reducirse o porque dos de las tres variables se igualen en ese momento aproximadamente. A continuación analizaremos caso por caso.
 +
 
 +
===Caso 1: <math> S_0=159985, I_0=15, r=0.0000218, a=0.341, I=[0,4] y [0,20] </math>===
 +
 
 +
Como hemos indicado al inicio, la epidemia finaliza cuando el número de infectados deja de crecer, ya que eso nos indica que cada vez menos personas contraen la enfermedad, y como podemos ver en las gráficas, el número de personas susceptibles de contagiarse ha empezado a decrecer desde que se inició la epidemia.
 +
 
 +
La población sana se contagia de la enfermedad prácticamente al completo antes de la quinta semana, aumentando a su vez, y como es lógico (S + I + R = N), los infectados y los curados, en menor medida estos últimos. Los infectados tienen un máximo entre las semanas 3 y 4, a partir del cual empiezan a disminuir porque la población se recupera hasta casi su totalidad. Se cumple que la duración media de la epidemia sea de <math> \frac{1}{a} </math>  (tres semanas aproximadamente), ya que las curvas de infectados alcanzan su máximo en torno a la cuarta semana desde que comienza la epidemia.
 +
 
 +
En cuanto al número de infectados, su valor en la gráfica no es inferior al inicial hasta la semana 20. De acuerdo con la información del gráfico, la tasa de reproducción de la infección debería ser inferior.
 +
 
 +
===Caso 2: <math> S_0=140000, I_0=20000, r=0.0000218, a=0.341, I=[0,4] y [0,20] </math>===
 +
 
 +
La población sana se infecta casi en su totalidad antes de la segunda semana, con un aumento mucho mayor que el caso anterior. Esto se debe a que el número de infectados en el Caso 1 eran 15 y en el Caso 2, 20000. Las curvas de curados e infectados tienen la misma forma que en el Caso 1 pero con unas variaciones más suaves, teniendo que pasar más de 20 semanas para que los curados tiendan a ser la población total.
 +
 
 +
En este caso no podemos considerar la duración media de la epidemia como <math> \frac{1}{a} </math>, ya que como podemos ver en las gráficas el número de infectados empieza a decrecer aproximadamente al cabo de 9 días.
 +
 
 +
En el Caso 2 también apreciamos que la tasa de reproducción de la infección <math> (R_0=\frac{r}{a} \cdot S_0)</math>  debería ser menor que el valor obtenido analíticamente, aunque el valor obtenido previo a la gráfica nos da una idea previa de cómo va a ser la diferencia de tamaño entre los habitantes susceptibles iniciales y los removidos.
 +
 
 +
===Caso 3: <math> S_0=159999, I_0=1, r=0.0000218, a=0.341, I=[0,4] y [0,20] </math>===
 +
 
 +
Como inicialmente tenemos un único infectado, la población comienza a desarrollar la enfermedad en torno a la segunda semana, estando infectada casi en su mayoría al comienzo de la quinta semana. La variación de las curvas de infectados y sanos tienen una gran pendiente. Los curados tienen a aumentar con una pendiente más suave, hasta estabilizarse y llegar estar curada toda la población. El comportamiento es muy similar al Caso 1, solo que con un ligero desplazamiento a la derecha.
 +
 
 +
Realmente y como se ha dicho en el apartado anterior, las curvas S e I tienden a cero y la curva R tiende a N en el infinito, aunque es válido decir que son cero y N respectivamente cuando ha pasado un tiempo t lo suficientemente grande como para que el error del método sea pequeño.
 +
 
 +
 
 +
La conclusión fundamental que podemos obtener de este análisis es que la relación entre el número inicial de habitantes y el valor al que tiende la función R(t) al cabo del tiempo. Con el transcurso de las semanas vemos en todas las gráficas que el número de personas removidas tiende a 250000, es decir, a N/2. Por tanto, podremos decir que es la mitad de la población la que ha sido afectada por la epidemia.
 +
 
 +
==Trayectorias==
 +
 
 +
Para obtener las trayectorias, partimos de la ecuación:  <math> \frac {dI}{dS} =-1+\frac {\rho}{S} </math><br />
 +
Si integramos dicha ecuación y despejamos, obtenemos las trayectorias: <math> I+S-\rho log S = k , k\in\mathbb{R} </math><br />
 +
que se encuentran en el triángulo de vértices <math> (S,I) = (0,0), (S,I) = (0,N) y (S,I) = (N,0)</math>.<br />
 +
<br />
 +
 
 +
Siendo k una constante que cambiará según las condiciones iniciales, hallaremos las trayectorias cuyas condiciones iniciales sean las que hemos estudiado anteriormente. Calcularemos numéricamente las tres condiciones iniciales con paso h=0.001 e I=[0,20], obteniendo tres gráficas para cada condición inicial. Una con la trayectoria de I(t) frente al tiempo en los 3 métodos, otra para S(t) y otra que compare ambas para demostrar que se cumple el triángulo (0,0), (0;N) y (N,0).
 +
 
 +
{{matlab|codigo=
 +
t0=0;h=0.001;tf=20; % calcularemos trayectorias para h=0.1 el intervalo [0,20]
 +
S0=159985; I0=15;
 +
r=0.0000218; a=0.341;
 +
t=t0:h:tf;
 +
n=((tf-t0)/h);
 +
Sa=[];
 +
Ia=[];
 +
Sb=[];
 +
Ib=[];
 +
Sc=[];
 +
Ic=[];
 +
Sa(1)=S0;
 +
Ia(1)=I0;
 +
Sb(1)=S0;
 +
Ib(1)=I0;
 +
Sc(1)=S0;
 +
Ic(1)=I0;
 +
k=I0+S0-(a/r)*log(S0); % hallamos la constante k a partir de los valores iniciales escogidos
 +
% euler
 +
for i=1:n
 +
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
 +
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
 +
   
 +
end
 +
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
 +
% definir el código
 +
for j=1:n
 +
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
 +
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
 +
end
 +
% runge-kutta
 +
for m=1:n
 +
k1S = -r*Sc(m)*Ic(m);
 +
k1I = r*Sc(m)*Ic(m)-a*Ic(m);
 +
 
 +
k2S = -r*(Sc(m) + 1/2*k1S*h)*(Ic(m) + 1/2*k1I*h);
 +
k2I = r*(Sc(m) + 1/2*k1S*h)*(Ic(m) + 1/2*k1I*h)-a*(Ic(m) + 1/2*k1I*h);
 +
 +
k3S = -r*(Sc(m) + 1/2*k2S*h)*(Ic(m) + 1/2*k2I*h);
 +
k3I = r*(Sc(m) + 1/2*k2S*h)*(Ic(m) + 1/2*k2I*h)-a*(Ic(m) + 1/2*k2I*h);
 +
 +
k4S = r*(Sc(m) + k3S*h)*(Ic(m) + k3I*h);
 +
k4I = r*(Sc(m) + k3S*h)*(Ic(m) + k2I*h)-a*(Ic(m) + 1/2*k2I*h);
 +
 +
Sc(m+1) = Sc(m) + (h/6)*(k1S+2*k2S+2*k3S+k4S);
 +
Ic(m+1) = Ic(m) + (h/6)*(k1I+2*k2I+2*k3I+k4I);
 +
 
 +
end
 +
figure
 +
subplot(1,3,1)
 +
plot(t,Ia,'g',t,Ib,'b',t,Ic,'m')
 +
legend('Euler','Euler implícito','Runge-kutta','location','best')
 +
subplot(1,3,2)
 +
plot(t,Sa,'g',t,Sb,'b',t,Sc,'m')
 +
legend('Euler','Euler implícito','Runge-kutta','location','best')
 +
subplot(1,3,3)
 +
plot(Sa,Ia,'g',Sb,Ib,'b',Sc,Ic,'m')
 +
legend('Euler','Euler implícito','Runge-kutta','location','best')
 +
}}
 +
 
 +
[[Archivo:Trayectorias1.jpg|1200px|thumb|left|Trayectorias Caso 1]]
 +
[[Archivo:Trayectorias2.jpg|1200px|thumb|left|Trayectorias Caso 2]]
 +
[[Archivo:Trayectorias3.jpg|1200px|thumb|left|Trayectorias Caso 3]]
 +
 
 +
En todas las trayectorias podemos apreciar un máximo, que al ser en función de I(t) sería el punto de mayor infectados, teniendo una forma de parábola aproximadamente en el que aumenta rápidamente el número de infectados y después del máximo, disminuye rápidamente hasta que el número de infectados tiende a cero.
 +
 
 +
 
 +
==Número máximo de infectados==
 +
 
 +
El objetivo en este apartado es hallar el valor máximo de I(t), es decir, el número máximo de infectados por la epidemia para el Caso 1 y el momento en el que se produce el máximo número de infectados (en qué semana).
 +
 
 +
Si ahora, en lugar de integrar, derivamos la expresión <math> \frac {dI}{dS} =-1+\frac {\rho}{S} </math><br /> obtenemos la siguiente ecuación:
 +
<br />
 +
: <math> I(máximo) = N - \rho + \rho  log\frac{\rho}{S_0} </math>
 +
<br />
 +
Para ello creamos el siguiente código numérico que nos proporciona el máximo analítico para el valor de N del primer caso (que es una constante <math> N=S_0+I_0 </math>) y también el máximo obtenido para el mismo caso aproximado con los tres métodos utilizados:
 +
 
 +
{{matlab|codigo=
 +
t0=0;h= 0.001;tf=20;
 +
S0=159985; I0=15; r=0.0000218; a=0.341; R0=0;
 +
t=t0:h:tf;
 +
k=((tf-t0)/h);
 +
Sa=[];
 +
Ia=[];
 +
Ra=[];
 +
Sb=[];
 +
Ib=[];
 +
Rb=[];
 +
Sc=[];
 +
Ic=[];
 +
Rc=[];
 +
Sa(1)=S0;
 +
Ia(1)=I0;
 +
Ra(1)=R0;
 +
Sb(1)=S0;
 +
Ib(1)=I0;
 +
Rb(1)=R0;
 +
Sc(1)=S0;
 +
Ic(1)=I0;
 +
Rc(1)=R0;
 +
% Euler
 +
for i=1:k
 +
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
 +
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
 +
    Ra(i+1)=Ra(i)+h*(a*Ia(i));
 +
end
 +
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
 +
% definir el código
 +
for j=1:k
 +
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
 +
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
 +
  Rb(j+1)=Rb(j)+h*(a*Ib(j));
 +
end
 +
% Runge-Kutta
 +
for n=1:k
 +
k1S = -r*Sc(n)*Ic(n);
 +
k1I = r*Sc(n)*Ic(n)-a*Ic(n);
 +
k1R = a*Ic(n);
 +
k2S = -r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h);
 +
k2I = r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h)-a*(Ic(n) + 1/2*k1I*h);
 +
k2R = a*(Ic(n) + 1/2*k1I*h);
 +
k3S = -r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h);
 +
k3I = r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 +
k3R = a*(Ic(n) + 1/2*k2I*h);
 +
k4S = r*(Sc(n) + k3S*h)*(Ic(n) + k3I*h);
 +
k4I = r*(Sc(n) + k3S*h)*(Ic(n) + k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 +
k4R = a*(Ic(n) + k3I*h);
 +
Sc(n+1) = Sc(n) + (h/6)*(k1S+2*k2S+2*k3S+k4S);
 +
Ic(n+1) = Ic(n) + (h/6)*(k1I+2*k2I+2*k3I+k4I);
 +
Rc(n+1) = Rc(n) + (h/6)*(k1R+2*k2R+2*k3R+k4R);
 +
end
 +
N=S0+I0;
 +
ro=a/r
 +
maxanalitico=N-ro+(ro*log(ro/S0))
 +
maxeuler=max(Ia)
 +
maximplicito=max(Ib)
 +
maxrungekutta=max(Ic)
 +
}}
 +
 
 +
Máximo analítico= 107.990<br />
 +
Máximo Euler=108.020<br />
 +
Máximo Euler implícito=108.340<br />
 +
Máximo Runge-Kutta 4=161.960<br />
 +
 +
Podemos observar que el máximo por el método de Euler es el que más se aproxima a la solución analítica.
 +
 
 +
 
 +
Los resultados obtenidos son válidos para <math> S_0>\rho </math>, por lo que debemos comprobar los resultados en el caso de que <math> S_0 \le \rho </math>, y para ello debemos cambiar el valor de <math> S_0 </math>.  Si el valor de <math>\rho </math> es 15.642, podremos probar con un valor para <math> S_0 </math> de 14.000.
 +
 
 +
{{matlab|codigo=
 +
t0=0;h= 0.001;tf=20;
 +
S0=14000; I0=15; r=0.0000218; a=0.341; R0=0;
 +
t=t0:h:tf;
 +
k=((tf-t0)/h);
 +
Sa=[];
 +
Ia=[];
 +
Ra=[];
 +
Sb=[];
 +
Ib=[];
 +
Rb=[];
 +
Sc=[];
 +
Ic=[];
 +
Rc=[];
 +
Sa(1)=S0;
 +
Ia(1)=I0;
 +
Ra(1)=R0;
 +
Sb(1)=S0;
 +
Ib(1)=I0;
 +
Rb(1)=R0;
 +
Sc(1)=S0;
 +
Ic(1)=I0;
 +
Rc(1)=R0;
 +
% Euler
 +
for i=1:k
 +
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
 +
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
 +
    Ra(i+1)=Ra(i)+h*(a*Ia(i));
 +
end
 +
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
 +
% definir el código
 +
for j=1:k
 +
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
 +
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
 +
  Rb(j+1)=Rb(j)+h*(a*Ib(j));
 +
end
 +
% Runge-Kutta
 +
for n=1:k
 +
k1S = -r*Sc(n)*Ic(n);
 +
k1I = r*Sc(n)*Ic(n)-a*Ic(n);
 +
k1R = a*Ic(n);
 +
k2S = -r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h);
 +
k2I = r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h)-a*(Ic(n) + 1/2*k1I*h);
 +
k2R = a*(Ic(n) + 1/2*k1I*h);
 +
k3S = -r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h);
 +
k3I = r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 +
k3R = a*(Ic(n) + 1/2*k2I*h);
 +
k4S = r*(Sc(n) + k3S*h)*(Ic(n) + k3I*h);
 +
k4I = r*(Sc(n) + k3S*h)*(Ic(n) + k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 +
k4R = a*(Ic(n) + k3I*h);
 +
Sc(n+1) = Sc(n) + (h/6)*(k1S+2*k2S+2*k3S+k4S);
 +
Ic(n+1) = Ic(n) + (h/6)*(k1I+2*k2I+2*k3I+k4I);
 +
Rc(n+1) = Rc(n) + (h/6)*(k1R+2*k2R+2*k3R+k4R);
 +
end
 +
N=S0+I0
 +
ro=a/r
 +
maxanalitico=N-ro+(ro*log(ro/S0))
 +
maxeuler=max(Ia)
 +
maximplicito=max(Ib)
 +
maxrungekutta=max(Ic)
 +
}}
 +
 
 +
Así, podemos concluir con que los valores máximos numéricos obtenidos son menores que la solución analítica:
 +
 
 +
Analítico: 107
 +
 
 +
Numérico: 15
  
  

Revisión actual del 21:17 11 may 2016

Trabajo realizado por estudiantes
Título Modelo para epidemias. Grupo 6-C
Asignatura Ecuaciones Diferenciales
Curso Curso 2015-16
Autores

Manuel Jesús García Vega
Alberto Jordá Laguna
Pablo Molinero Brito

Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura




1 Introducción

En este artículo vamos a centrar nuestro estudio en el desarrollo de modelos que nos permitan hacer una estimación del comportamiento temporal de una enfermedad infecciosa sin extensión espacial.

Suponemos las siguientes hipótesis:

1. La población es un número fijo N y cada miembro de la población es susceptible a la enfermedad. 


2. La duración de la enfermedad es larga, de manera que no se cura durante el periodo de estudio. 


3. Todos los individuos infectados son contagiosos y circulan libremente entre la población.

4. Durante cada unidad de tiempo cada persona infectada tiene c contactos y cada contacto con una persona no infectada redunda en la transmisión de la enfermedad.

2 Cálculo del número de contactos aproximados 'c'

Para realizar el cálculo del número de contactos ‘aproximados’ c que tiene una persona por unidad de tiempo emplearemos un método numérico basado en la siguiente ecuación logística: Ecuación Logística.png

donde:

I(t): Número de personas contagidas al cabo de un tiempo de t semanas.

c: Número de contactos que tiene una persona pasadas t semanas.

N: Población total en el lugar de estudio.

Además sabemos que los servicios de salud pública registran la difusión de una epidemia de gripe de duración particularmente larga en una ciudad de 500 000 personas. Al inicio de la primera semana de registro se habían contabilizado 200 casos; durante la primera semana aparecieron 300 nuevos casos.

Sabiendo que 'c' tiene valores entre 0.01 y 0.99, hemos creado un bucle que pasa por cada uno de esos valores, guardando en un vector la condición de |I(primera semana) - 500|, se ha representado gráficamente en comparación con todos los valores posibles de 'c' y también hemos obtenido la solución de forma numérica de cómo varía según la condición.

Para obtener el número de contactos utilizaremos el siguiente método númerico, el cual está basado en el método de Euler.

clear, close all
%Datos del problema
y=[];
y0=200;
c=linspace(1/100,99/100,99);
N=500000; %Población total;
x=linspace(0,300,99);
n=length(c); %numero de puntos
c0=c(1); 
Y=N
%Esquema númérico
for i=1:n
    Yfinal=Y;
    Y=N*y0/(y0+(N-y0).*exp(-c(i))); % en t=1
    y=[y;Y]
    if abs(Y-500)<=abs(Yfinal-500)
        c0=c(i)
    end
end
min(abs(y-500)) %Error absoluto mínimo
plot(c,abs(y-500))


Al ejecutar el programa obtenemos el siguiente gráfico que representa la evolución del error que se produce para cada valor de 'c' . Y se obtiene el valor de 'c' que minimiza el error el cual es igual a 0,92.

EpidemiaEuler.jpg

3 Evolución de los Infectados por la Epidemia

Para determinar la evolución de los infectados por la epidemia conforme avanza el tiempo, emplearemos el método de Heun y el método de Runge Kutta de orden 4.

Método de Heun:

MétodoHeun.png

Método de Runge-Kutta:

MétodoRungeKutta.png

Mediante los métodos expuestos, el de Heun y Runge-Kutta, podemos determinar la evolución que experimentan los infectados a lo largo de las semanas. Dicha Evolución la vamos a representar gráficamente mediante el siguiente código empleado en MATLAB:

Evolución de la epidemia a lo largo del tiempo
t0=0;
h=0.01;
z=[]; %Heun
y=[]; %Runge-Kutta
y0=200;
z0=200;
y(1)=y0;
z(1)=z0;
c =0.92;
N=500000; %Población total en el lugar de estudio
for i=1:N;
while y<400000 & z<400000
% Método de Heun
K1H=(c*z(i))/N*(N-z(i));
K2H=(c*(z(i)+K1H*h))/N*(N-(z(i)+K1H*h));
z(i+1)=z(i)+(h/2)*(K1H+K2H);

%Método de Runge Kutta
k1=(c*y(i))/N*(N-y(i));
k2=(c*(y(i)+1/2*k1*h))/N*(N-(y(i)+1/2*k1*h));
k3=(c*(y(i)+1/2*k2*h))/N*(N-(y(i)+1/2*k2*h));
k4=(c*(y(i)+k3*h))/N*(N-(y(i)+h*k3));
y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4);
i=i+1;
end
end
%Discretización variable independiente
tN1=h*(length(y)-1);
tN2=h*(length(z)-1);
ty=t0:h:tN1;
tz=t0:h:tN2;

Semana_maxima_infeccion=[ty(end) tz(end)]
ValorAproximado=[y(6/h),z(6/h)] %valor aproximado de infectados pasadas 6 semanas
hold on 
%gráfica Runge-Kutta
plot(ty,y,'b')
%gráfica Heun
plot(tz,z,'r')
xlabel('Tiempo en semananas');
ylabel('Número de infectados');
legend('Runge Kutta','Heun','Location','best')
hold off


GráficaRungeKutta-Heun.jpg

Tal y cómo se puede apreciar en los gráficos adjuntos, el número de infectados es siempre creciente y lo hace de forma exponencial, de manera que el número de infectados seguirá aumentando hasta llegar a contagiar a toda la población, que en nuestro caso es de 500.000 habitantes. Al tratarse de una función exponencial que está acotada se comprueba la veracidad del máximo anteriormente dicho (500.000 habitantes).

También se aprecia que hay muy poca diferencia entre las gráficas obtenidas por Heun y Runge-Kutta, de hecho, para ver de forma más clara la diferencia entre éstas, hemos tenido que aumentar hasta el orden de la diezmilésima en el eje de las X y teniendo en cuenta que la unidad es la semana.

Además de las gráficas, el código nos devuelve el número de infectados pasadas 6 semanas y el tiempo que pasa hasta llegar a 400.000 personas infectadas.

-Utilizando el método de Heun:

A las 6 semanas hay 45.029 infectados. Se llega a los 400.000 infectados pasadas 10 semanas y un día y medio aproximadamente.

-Utilizando el método de Runge-Kutta:

A las 6 semanas hay 45.032 infectados. Se llega a los 400.000 infectados pasadas 10 semanas y un día y medio aproximadamente.

Ahora, podríamos pensar en poblaciones tales que si el número de individuos N es elevado entonces la tasa es decreciente, y que si la población en un determinado momento M es demasiado pequeña esta tasa también decrece (por ejemplo, por la dificultad de individuos a los que contagiar los infectados). Para ello debemos modificar la ecuación logística por: \[ I'=c \cdot I \cdot \left(1-\displaystyle\frac{I}{N} \right) \cdot \left(\displaystyle\frac{I}{M} -1 \right) \] Ahora, utilizando el método de Heun, con longitud de paso H=0.01 y humbral M=10000, vamos a determinar las g´raficas de evolución de infectados, para los casos I(0)=9700,10200 y 30000.

N= 500000; % población total
M= 10000; % umbral de población 
c=0.92; % coef de contagio
ti=0; tf=10; % hacemos la g´rafica par aun período de 10 semanas
h=0.01;
t= ti:h:tf;
k=(tf-ti)/h;
I1=zeros(1,k+1);
I10=9700; 
I1(1)=I10;

for i=1:k
    K1 = (c*I1(i))/N*(N-I1(i))*((I1(i)/M)-1);
    K2 = (c*(I1(i)+K1*h))/N*(N-(I1(i)+K1*h))*(((I1(i)+K1*h)/M)-1);
    I1(i+1) = I1(i) + (h/2)*(K1+K2);
end
I2=zeros(1,k+1);
I20=10200; 
I2(1)=I20;
 
for j=1:k
     L1 = (c*I2(j))/N*(N-I2(j))*((I2(j)/M)-1);
     L2 = (c*(I2(j)+L1*h))/N*(N-(I2(j)+L1*h))*(((I2(j)+L1*h)/M)-1);
     I2(j+1) = I2(j) + (h/2)*(L1+L2);
end
I3=zeros(1,k+1);
I30=30000;
I3(1)=I30;

for l=1:k
    P1 = (c*I3(l))/N*(N-I3(l))*((I3(l)/M)-1);
    P2 = (c*(I3(l)+K1*h))/N*(N-(I3(l)+P1*h))*(((I3(l)+P1*h)/M)-1);
    I3(l+1) = I3(l) + (h/2)*(P1+P2);
end
hold on
plot(t,I1)
plot(t,I2,'y')
plot(t,I3,'m')
legend('Io=9700','Io=10200','Io=30000','location','best')
hold off


Grafica de la evolucion de los infectados para los diferentes I(0)
Estudio del nuevo modelo para distintas condiciones inciales por separado.


Los infectados solo tienden a desaparecer en el único caso en el que I(0)<M, es decir en el que I(0)=9700. En este caso el máximo está al principio. En los otros dos casos, el número de infectados crece con el tiempo, en el caso de I(0)=10200 el máximo se alcanza en la semana 4 y en el caso de I(0)=30000 se alcanza en la semana 1






4 Segunda Parte: Modelo SIR

Ahora vamos a usar un modelo más general para estudiar la enfermedad, que divide la población total N en susceptibles de ser infectados(S), infectados(I), y removidos, que agrupa tanto a los curados como a los muertos (R). Así, el modelo, que tiene tres incógnitas, S(t), I(t) y R(t), y llamando r a la tasa de infección y a a la de remoción, lo podemos escribir:

Modelo SIR

4.1 Demostración de que [math] S\left ( t \right )+I\left (t\right )+R\left ( t\right )=N [/math]

Sumando la variación de los susceptibles, los infectados y los removidos, vemos que esta es igual a 0, lo que nos quiere decir que la población total N es constante:

[math] \frac{\partial S}{\partial t}+\frac{\partial I}{\partial t}+\frac{\partial R}{\partial t}= S’\left ( t \right )+I’\left (t\right )+R’\left ( t\right )\left ( -rSI \right )+\left ( rSI-aI \right )+\left ( aI\right )=0 [/math]

Además, si sumamos sus valores iniciales vemos que estos son igual a la población total, y al ser ésta constante, vemos que se demuestra el enunciado inicial:

[math] S\left ( 0 \right )+I\left (0\right )+R\left ( 0\right )=N [/math]

4.2 Demostraciones analíticas con la tasa de remoción relativa

Primera demostración del apartado 4.2
Segunda demostración del apartado 4.3

Llamamos tasa de remoción relativa a: [math] \rho =\frac{r}{a} [/math] Vamos a demostrar que si dicha tasa es mayor o igual que el número de personas susceptibles iniciales, [math] S\left ( 0 \right ) [/math], no hay epidemia, ya que el número de infectados no aumenta. También vamos a demostrar que, si dicha tasa es menor que la población susceptible inicial, habrá epidemia, pues aumentarán el número de infectados:

4.3 Resolución numérica

Ahora vamos a resolver numéricamente el problema de epidemias, usando los métodos de Euler, Euler implícito y Runge-Kutta de orden 4. Los aplicaremos a 3 casos, cada uno con diferentes datos, y probando con diferentes anchuras de paso: Mostramos el código para el primer caso con h=0.1

t0=0;%Intervalo de tiempo y anchura de paso
;tf=4;
h= 0.1
S0=159985; I0=15; % datos de la población 
r=0.0000218; a=0.341; R0=0;
t=t0:h:tf;
k=((tf-t0)/h);
Se=[]; % método de euler
Ie=[];
Re=[];
Si=[]; % euler implícito
Ii=[];
Ri=[];
Sr=[]; % runge-kutta
Ir=[];
Rr=[];
Se(1)=S0;
Ie(1)=I0;
Re(1)=R0;
Si(1)=S0;
Ii(1)=I0;
Ri(1)=R0;
Sr(1)=S0;
Ir(1)=I0;
Rr(1)=R0;
% esquema numérico euler
for i=1:k
    Ie(i+1)=Ie(i)+h*(r*Se(i)*Ie(i)-a*Ie(i));
    Se(i+1)=Se(i)+h*(-r*Se(i)*Ie(i));
    Re(i+1)=Re(i)+h*(a*Ie(i));
end
% esquema numérico euler implícito (es necesario despejar la I, la S y la R de (j+1) para definir el código
for j=1:k
  Ii(j+1)=Ii(j)/(1-(h*r*Si(j))+a*h);
  Si(j+1)=Si(j)/(1+r*h*Ii(j));
  Ri(j+1)=Ri(j)+h*(a*Ii(j));
end
%esquema numerico runge-kutta
for n=1:k
 k1S = -r*Sr(n)*Ir(n); 
 k1I = r*Sr(n)*Ir(n)-a*Ir(n);
 k1R = a*Ir(n);
 k2S = -r*(Sr(n) + 1/2*k1S*h)*(Ir(n) + 1/2*k1I*h);
 k2I = r*(Sr(n) + 1/2*k1S*h)*(Ir(n) + 1/2*k1I*h)-a*(Ir(n) + 1/2*k1I*h);
 k2R = a*(Ir(n) + 1/2*k1I*h);
 k3S = -r*(Sr(n) + 1/2*k2S*h)*(Ir(n) + 1/2*k2I*h);
 k3I = r*(Sr(n) + 1/2*k2S*h)*(Ir(n) + 1/2*k2I*h)-a*(Ir(n) + 1/2*k2I*h);
 k3R = a*(Ir(n) + 1/2*k2I*h);
 k4S = r*(Sr(n) + k3S*h)*(Ir(n) + k3I*h);
 k4I = r*(Sr(n) + k3S*h)*(Ir(n) + k2I*h)-a*(Ir(n) + 1/2*k2I*h);
 k4R = a*(Ir(n) + k3I*h);
Sr(n+1) = Sr(n) + (h/6)*(k1S+2*k2S+2*k3S+k4S); 
Ir(n+1) = Ir(n) + (h/6)*(k1I+2*k2I+2*k3I+k4I); 
Rr(n+1) = Rr(n) + (h/6)*(k1R+2*k2R+2*k3R+k4R); 
end
hold on
plot(t,Ia,'--g',t,Sa,'--m',t,Ra,'--b')
plot(t,Ib,':g',t,Sb,':m',t,Rb,':b')
plot(t,Ic,'-g',t,Sc,'-m',t,Rc,'-b')
legend('I Euler','S Euler','R Euler','I Euler implícito','S Euler implícito','R Euler implícito','I Runge-Kutta','S Runge-Kutta','R Runge-Kutta','Location','best')
hold off

A continuacion mostramos las gráficas obtenidas, para todas r=0,0000218 a=0,341:


Caso 1:S(0)=159985, I(0)=15, h=0,1, 4 semanas
Caso 1:S(0)=159985, I(0)=15, h=0,1, 20 semanas
Caso 1:S(0)=159985, I(0)=15, h=0,01, 4 semanas
Caso 1:S(0)=159985, I(0)=15, h=0,01 20 semanas
Caso 1:S(0)=159985, I(0)=15, h=0,001, 4 semanas
Caso 1:S(0)=159985, I(0)=15, h=0,001, 20 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,1, 4 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,1, 20 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,01, 4 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,01, 20 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,001, 4 semanas
Caso 2:S(0)=140000, I(0)=20000, h=0,001, 20 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,1, 4 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,1, 20 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,01, 4 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,01, 20 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,001, 4 semanas
Caso 3:S(0)=159999, I(0)=1, h=0,001, 20 semanas

Como se puede observar en las diferentes gráficas, cuanto menor es el tamaño de paso mas aproximado es el método, siéndolo el que más el de Runge-Kutta que además es el único de orden 4.

5 Interpretación de la epidemia y justificación de parámetros

Consideraremos que la epidemia ha finalizado cuando el número de infectados deja de crecer, es decir, cuando la función I(t) alcanza su máximo absoluto. Podemos ver claramente que todos los casos corresponden a modelos de epidemias, ya que siempre se cumple que los distintos valores de [math] S_0 [/math] son superiores al coeficiente de la tasa de remoción relativa [math](\rho = \frac{a}{r} ) [/math].

En los tres casos que se nos plantean con distintos valores iniciales vemos que el número e individuos susceptibles a infectarse (S) se va reduciendo a medida que los individuos infectados (I) e individuos removidos (R) va aumentando, por lo que las variables que hemos utilizado se ajusta a los valores numéricos.

Si vemos en un periodo medio de infección que se encontraría alrededor de tres semanas se puede apreciar cambios en todos los casos ya sea porque el número de susceptibles empiece a reducirse o porque dos de las tres variables se igualen en ese momento aproximadamente. A continuación analizaremos caso por caso.

5.1 Caso 1: [math] S_0=159985, I_0=15, r=0.0000218, a=0.341, I=[0,4] y [0,20] [/math]

Como hemos indicado al inicio, la epidemia finaliza cuando el número de infectados deja de crecer, ya que eso nos indica que cada vez menos personas contraen la enfermedad, y como podemos ver en las gráficas, el número de personas susceptibles de contagiarse ha empezado a decrecer desde que se inició la epidemia.

La población sana se contagia de la enfermedad prácticamente al completo antes de la quinta semana, aumentando a su vez, y como es lógico (S + I + R = N), los infectados y los curados, en menor medida estos últimos. Los infectados tienen un máximo entre las semanas 3 y 4, a partir del cual empiezan a disminuir porque la población se recupera hasta casi su totalidad. Se cumple que la duración media de la epidemia sea de [math] \frac{1}{a} [/math] (tres semanas aproximadamente), ya que las curvas de infectados alcanzan su máximo en torno a la cuarta semana desde que comienza la epidemia.

En cuanto al número de infectados, su valor en la gráfica no es inferior al inicial hasta la semana 20. De acuerdo con la información del gráfico, la tasa de reproducción de la infección debería ser inferior.

5.2 Caso 2: [math] S_0=140000, I_0=20000, r=0.0000218, a=0.341, I=[0,4] y [0,20] [/math]

La población sana se infecta casi en su totalidad antes de la segunda semana, con un aumento mucho mayor que el caso anterior. Esto se debe a que el número de infectados en el Caso 1 eran 15 y en el Caso 2, 20000. Las curvas de curados e infectados tienen la misma forma que en el Caso 1 pero con unas variaciones más suaves, teniendo que pasar más de 20 semanas para que los curados tiendan a ser la población total.

En este caso no podemos considerar la duración media de la epidemia como [math] \frac{1}{a} [/math], ya que como podemos ver en las gráficas el número de infectados empieza a decrecer aproximadamente al cabo de 9 días.

En el Caso 2 también apreciamos que la tasa de reproducción de la infección [math] (R_0=\frac{r}{a} \cdot S_0)[/math] debería ser menor que el valor obtenido analíticamente, aunque el valor obtenido previo a la gráfica nos da una idea previa de cómo va a ser la diferencia de tamaño entre los habitantes susceptibles iniciales y los removidos.

5.3 Caso 3: [math] S_0=159999, I_0=1, r=0.0000218, a=0.341, I=[0,4] y [0,20] [/math]

Como inicialmente tenemos un único infectado, la población comienza a desarrollar la enfermedad en torno a la segunda semana, estando infectada casi en su mayoría al comienzo de la quinta semana. La variación de las curvas de infectados y sanos tienen una gran pendiente. Los curados tienen a aumentar con una pendiente más suave, hasta estabilizarse y llegar estar curada toda la población. El comportamiento es muy similar al Caso 1, solo que con un ligero desplazamiento a la derecha.

Realmente y como se ha dicho en el apartado anterior, las curvas S e I tienden a cero y la curva R tiende a N en el infinito, aunque es válido decir que son cero y N respectivamente cuando ha pasado un tiempo t lo suficientemente grande como para que el error del método sea pequeño.


La conclusión fundamental que podemos obtener de este análisis es que la relación entre el número inicial de habitantes y el valor al que tiende la función R(t) al cabo del tiempo. Con el transcurso de las semanas vemos en todas las gráficas que el número de personas removidas tiende a 250000, es decir, a N/2. Por tanto, podremos decir que es la mitad de la población la que ha sido afectada por la epidemia.

6 Trayectorias

Para obtener las trayectorias, partimos de la ecuación: [math] \frac {dI}{dS} =-1+\frac {\rho}{S} [/math]
Si integramos dicha ecuación y despejamos, obtenemos las trayectorias: [math] I+S-\rho log S = k , k\in\mathbb{R} [/math]
que se encuentran en el triángulo de vértices [math] (S,I) = (0,0), (S,I) = (0,N) y (S,I) = (N,0)[/math].

Siendo k una constante que cambiará según las condiciones iniciales, hallaremos las trayectorias cuyas condiciones iniciales sean las que hemos estudiado anteriormente. Calcularemos numéricamente las tres condiciones iniciales con paso h=0.001 e I=[0,20], obteniendo tres gráficas para cada condición inicial. Una con la trayectoria de I(t) frente al tiempo en los 3 métodos, otra para S(t) y otra que compare ambas para demostrar que se cumple el triángulo (0,0), (0;N) y (N,0).

t0=0;h=0.001;tf=20; % calcularemos trayectorias para h=0.1 el intervalo [0,20]
S0=159985; I0=15; 
r=0.0000218; a=0.341; 
t=t0:h:tf;
n=((tf-t0)/h);
Sa=[]; 
Ia=[];
Sb=[]; 
Ib=[];
Sc=[]; 
Ic=[];
Sa(1)=S0;
Ia(1)=I0;
Sb(1)=S0;
Ib(1)=I0;
Sc(1)=S0;
Ic(1)=I0;
k=I0+S0-(a/r)*log(S0); % hallamos la constante k a partir de los valores iniciales escogidos
% euler
for i=1:n
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
    
end
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
% definir el código
for j=1:n
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
end
% runge-kutta
for m=1:n
 k1S = -r*Sc(m)*Ic(m); 
 k1I = r*Sc(m)*Ic(m)-a*Ic(m);

 k2S = -r*(Sc(m) + 1/2*k1S*h)*(Ic(m) + 1/2*k1I*h);
 k2I = r*(Sc(m) + 1/2*k1S*h)*(Ic(m) + 1/2*k1I*h)-a*(Ic(m) + 1/2*k1I*h);
 
 k3S = -r*(Sc(m) + 1/2*k2S*h)*(Ic(m) + 1/2*k2I*h);
 k3I = r*(Sc(m) + 1/2*k2S*h)*(Ic(m) + 1/2*k2I*h)-a*(Ic(m) + 1/2*k2I*h);
 
 k4S = r*(Sc(m) + k3S*h)*(Ic(m) + k3I*h);
 k4I = r*(Sc(m) + k3S*h)*(Ic(m) + k2I*h)-a*(Ic(m) + 1/2*k2I*h);
 
Sc(m+1) = Sc(m) + (h/6)*(k1S+2*k2S+2*k3S+k4S); 
Ic(m+1) = Ic(m) + (h/6)*(k1I+2*k2I+2*k3I+k4I); 

end
figure
subplot(1,3,1)
plot(t,Ia,'g',t,Ib,'b',t,Ic,'m')
legend('Euler','Euler implícito','Runge-kutta','location','best')
subplot(1,3,2)
plot(t,Sa,'g',t,Sb,'b',t,Sc,'m')
legend('Euler','Euler implícito','Runge-kutta','location','best')
subplot(1,3,3)
plot(Sa,Ia,'g',Sb,Ib,'b',Sc,Ic,'m')
legend('Euler','Euler implícito','Runge-kutta','location','best')


Trayectorias Caso 1
Trayectorias Caso 2
Trayectorias Caso 3

En todas las trayectorias podemos apreciar un máximo, que al ser en función de I(t) sería el punto de mayor infectados, teniendo una forma de parábola aproximadamente en el que aumenta rápidamente el número de infectados y después del máximo, disminuye rápidamente hasta que el número de infectados tiende a cero.


7 Número máximo de infectados

El objetivo en este apartado es hallar el valor máximo de I(t), es decir, el número máximo de infectados por la epidemia para el Caso 1 y el momento en el que se produce el máximo número de infectados (en qué semana).

Si ahora, en lugar de integrar, derivamos la expresión [math] \frac {dI}{dS} =-1+\frac {\rho}{S} [/math]
obtenemos la siguiente ecuación:

[math] I(máximo) = N - \rho + \rho log\frac{\rho}{S_0} [/math]


Para ello creamos el siguiente código numérico que nos proporciona el máximo analítico para el valor de N del primer caso (que es una constante [math] N=S_0+I_0 [/math]) y también el máximo obtenido para el mismo caso aproximado con los tres métodos utilizados:

t0=0;h= 0.001;tf=20;
S0=159985; I0=15; r=0.0000218; a=0.341; R0=0; 
t=t0:h:tf;
k=((tf-t0)/h);
Sa=[]; 
Ia=[];
Ra=[];
Sb=[];
Ib=[];
Rb=[];
Sc=[]; 
Ic=[];
Rc=[];
Sa(1)=S0;
Ia(1)=I0;
Ra(1)=R0;
Sb(1)=S0;
Ib(1)=I0;
Rb(1)=R0;
Sc(1)=S0;
Ic(1)=I0;
Rc(1)=R0;
% Euler
for i=1:k
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
    Ra(i+1)=Ra(i)+h*(a*Ia(i));
end
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
% definir el código
for j=1:k
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
  Rb(j+1)=Rb(j)+h*(a*Ib(j));
end
% Runge-Kutta
for n=1:k
 k1S = -r*Sc(n)*Ic(n); 
 k1I = r*Sc(n)*Ic(n)-a*Ic(n);
 k1R = a*Ic(n);
 k2S = -r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h);
 k2I = r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h)-a*(Ic(n) + 1/2*k1I*h);
 k2R = a*(Ic(n) + 1/2*k1I*h);
 k3S = -r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h);
 k3I = r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 k3R = a*(Ic(n) + 1/2*k2I*h);
 k4S = r*(Sc(n) + k3S*h)*(Ic(n) + k3I*h);
 k4I = r*(Sc(n) + k3S*h)*(Ic(n) + k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 k4R = a*(Ic(n) + k3I*h);
Sc(n+1) = Sc(n) + (h/6)*(k1S+2*k2S+2*k3S+k4S); 
Ic(n+1) = Ic(n) + (h/6)*(k1I+2*k2I+2*k3I+k4I); 
Rc(n+1) = Rc(n) + (h/6)*(k1R+2*k2R+2*k3R+k4R); 
end
N=S0+I0;
ro=a/r
maxanalitico=N-ro+(ro*log(ro/S0))
maxeuler=max(Ia)
maximplicito=max(Ib)
maxrungekutta=max(Ic)


Máximo analítico= 107.990
Máximo Euler=108.020
Máximo Euler implícito=108.340
Máximo Runge-Kutta 4=161.960

Podemos observar que el máximo por el método de Euler es el que más se aproxima a la solución analítica.


Los resultados obtenidos son válidos para [math] S_0\gt\rho [/math], por lo que debemos comprobar los resultados en el caso de que [math] S_0 \le \rho [/math], y para ello debemos cambiar el valor de [math] S_0 [/math]. Si el valor de [math]\rho [/math] es 15.642, podremos probar con un valor para [math] S_0 [/math] de 14.000.

t0=0;h= 0.001;tf=20;
S0=14000; I0=15; r=0.0000218; a=0.341; R0=0; 
t=t0:h:tf;
k=((tf-t0)/h);
Sa=[]; 
Ia=[];
Ra=[];
Sb=[];
Ib=[];
Rb=[];
Sc=[]; 
Ic=[];
Rc=[];
Sa(1)=S0;
Ia(1)=I0;
Ra(1)=R0;
Sb(1)=S0;
Ib(1)=I0;
Rb(1)=R0;
Sc(1)=S0;
Ic(1)=I0;
Rc(1)=R0;
% Euler
for i=1:k
    Ia(i+1)=Ia(i)+h*(r*Sa(i)*Ia(i)-a*Ia(i));
    Sa(i+1)=Sa(i)+h*(-r*Sa(i)*Ia(i));
    Ra(i+1)=Ra(i)+h*(a*Ia(i));
end
% Euler implícito (es necesario despejar la I, la S y la R de (j+1) para
% definir el código
for j=1:k
  Ib(j+1)=Ib(j)/(1-(h*r*Sb(j))+a*h);
  Sb(j+1)=Sb(j)/(1+r*h*Ib(j));
  Rb(j+1)=Rb(j)+h*(a*Ib(j));
end
% Runge-Kutta
for n=1:k
 k1S = -r*Sc(n)*Ic(n); 
 k1I = r*Sc(n)*Ic(n)-a*Ic(n);
 k1R = a*Ic(n);
 k2S = -r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h);
 k2I = r*(Sc(n) + 1/2*k1S*h)*(Ic(n) + 1/2*k1I*h)-a*(Ic(n) + 1/2*k1I*h);
 k2R = a*(Ic(n) + 1/2*k1I*h);
 k3S = -r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h);
 k3I = r*(Sc(n) + 1/2*k2S*h)*(Ic(n) + 1/2*k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 k3R = a*(Ic(n) + 1/2*k2I*h);
 k4S = r*(Sc(n) + k3S*h)*(Ic(n) + k3I*h);
 k4I = r*(Sc(n) + k3S*h)*(Ic(n) + k2I*h)-a*(Ic(n) + 1/2*k2I*h);
 k4R = a*(Ic(n) + k3I*h);
Sc(n+1) = Sc(n) + (h/6)*(k1S+2*k2S+2*k3S+k4S); 
Ic(n+1) = Ic(n) + (h/6)*(k1I+2*k2I+2*k3I+k4I); 
Rc(n+1) = Rc(n) + (h/6)*(k1R+2*k2R+2*k3R+k4R); 
end
N=S0+I0
ro=a/r
maxanalitico=N-ro+(ro*log(ro/S0))
maxeuler=max(Ia)
maximplicito=max(Ib)
maxrungekutta=max(Ic)


Así, podemos concluir con que los valores máximos numéricos obtenidos son menores que la solución analítica:

Analítico: 107

Numérico: 15