Modelo para epidemias (Grupo 9C, Trabajo 7)

De MateWiki
Revisión del 18:22 5 mar 2015 de Nerea González Rivas (Discusión | contribuciones) (Semana a partir de la cuál hay más de 400.000 infectados)

Saltar a: navegación, buscar

En este trabajo vamos a estudiar el comportamiento de una enfermedad infecciosa (epidemia) en una población de N habitantes, la cual es inextensible espacialmente (no varía el número de habitantes).

1 ª Parte

En la primera parte del trabajo vamos a emplear un modelo sencillo que implica una ecuación diferencial de primer orden. Como datos tenemos el número total de habitantes (N=500.000 habitantes), el número inicial de infectados (I(0)=200 casos), el número de infectados tras la primera semana (I(1)=500 casos).

1.1 Número de contactos 'aproximados'

Para calcular los contactos 'aproximados', hemos empleado el método de Euler. Sabiendo que C tiene valores entre 0.01 y 0.99, hemos creado un bucle que ha pasado por cada uno de esos valores, guardando en un vector la condición de |I(primera semana) - 500| y dibujándolo en comparación con todas las C posibles para ver gráficamente, además de numéricamente, la variación de la condición.

El código empleado para estos cálculos es el siguiente:

clear all
clc
clf
% Apartado 1
y0=200;
h=0.01;
t=0:0.01:1;                          % Vector en el que se estudia la epidemia
n=length(t);                         % Número de puntos
c=0.01:0.01:0.99;                    % Vector de posibles C
m=length(c);                         % Número de posibles C
Y=zeros(m,n);                        % Matriz donde guardamos, por filas, las soluciones de los infectados según C
y(1)=y0;
% Método de Euler-------------------------------------------------------------------------------------------------
for k=1:m
  Y(k,1)=y0;
  for i=1:n-1
    y(i+1)=y(i)+h*(c(k)/500000*(500000-y(i))*y(i));
    Y(k,i+1)=y(i+1);
  end
end
I=abs(Y(:,n)-500*(ones(1,m)'));      % Condición de abs(I(primera semana)-500) 
minimo=min(I);                       % Mínimo de la condición
[u,v]=find(I==minimo);               % Posición del mínimo
C=u/100                              % C obtenida
plot(c,I)                            % Gráfica comparativa de C con la condición

Y la gráfica obtenida de la comparación de la condición en función de cada valor posible de C es:

Error absoluto en I(1) para cada c

1.2 Evolución de los infectados

Utilizando el método de Heun y Runge Kutta de orden 4, con un paso de h=0.01, la gráfica de evolución de afectados frente al tiempo (I(t),t) en un tiempo t=20 semanas, que hemos escogido para ver la curva completa, y el programa son los siguientes:

clc
clear all
clf
% Trabajo 7
% Apartado 1 Euler
t0=0;
tN=input('Introduce las semanas de estudio: ');
y0=200;
h=0.01;
N=round(tN-t0)/h;
% Vector tiempo
t=t0:h:tN;
% Vector de infectados para Runge Kutta
y=zeros(1,N+1);
y(1)=y0;
% Vector de infectados para Heun
z=zeros(1,N+1);
z(1)=y0;
% Contactos
c=0.92;
% Bucle de Euler
for i=1:N
  K1RK=c/500000*(500000-y(i))*y(i);
  K2RK=c/500000*(500000-(y(i)+h/2*K1RK))*(y(i)+h/2*K1RK);
  K3RK=c/500000*(500000-(y(i)+h/2*K2RK))*(y(i)+h/2*K2RK);
  K4RK=c/500000*(500000-(y(i)+h*K3RK))*(y(i)+h*K3RK);
  y(i+1)=y(i)+h/6*(K1RK+2*K2RK+2*K3RK+K4RK);
  K1H=c/500000*(500000-z(i))*z(i);
  K2H=c/500000*(500000-(z(i)+h*K1H))*(z(i)+h*K1H);
  z(i+1)=z(i)+h/2*(K1H+K2H);
end
% Gráficas de RK4 y Heun
figure(1)
plot(t,y)
legend('Runge Kutta orden 4')
figure(2)
plot(t,z,'r')
legend('Heun')


Gráfica de la variación de I en 20 semanas según RK4
Gráfica de la variación de I en 20 semanas según Heun

1.3 Infectados al terminar la sexta semana

Tras la sexta semana, los infectados se muestran con el siguiente programa, siendo: I(6)=4.5032e+004.

clc
clear all
clf
% Trabajo 7
% Apartado 1 Euler
t0=0;
tN=6;
y0=200;
h=0.01;
% Vector tiempo
t=t0:h:tN;
N=length(t);
% Vector de infectados
y=zeros(1,N);
y(1)=y0;
c=0.92;
% Bucle de Euler
for i=1:N-1
  K1=c/500000*(500000-y(i))*y(i);
  K2=c/500000*(500000-(y(i)+h/2*K1))*(y(i)+h/2*K1);
  K3=c/500000*(500000-(y(i)+h/2*K2))*(y(i)+h/2*K2);
  K4=c/500000*(500000-(y(i)+h*K3))*(y(i)+h*K3);
  y(i+1)=y(i)+h/6*(K1+2*K2+2*K3+K4);
end
InfectadosSemana6=y(600) % El I(6) es el punto 6/h=600


1.4 Semana a partir de la cuál hay más de 400.000 infectados

Estudiando las 20 primeras semanas de la epidemia, la semana a partir de la cual los infectados superan la cifra de 400000 es la semana 10 (con mayor exactitud, a partir de las 10.3 primeras semanas). El código empleado para su cálculo ha sido el siguiente:

clc
clear all
clf
% Trabajo 7
% Apartado 1 Euler
t0=0;
tN=input('Introduce las semanas de estudio: ');
y0=200;
h=input('Introduce el paso:');
% Vector tiempo
t=t0:h:tN;
N=length(t);
% Vector de infectados
y=zeros(1,N);
y(1)=y0;
c=0.92;
% Bucle de Euler
for i=1:N-1
  K1=c/500000*(500000-y(i))*y(i);
  K2=c/500000*(500000-(y(i)+h/2*K1))*(y(i)+h/2*K1);
  K3=c/500000*(500000-(y(i)+h/2*K2))*(y(i)+h/2*K2);
  K4=c/500000*(500000-(y(i)+h*K3))*(y(i)+h*K3);
  y(i+1)=y(i)+h/6*(K1+2*K2+2*K3+K4);
  if y(i)<=400000
    Sem=i+1;
  end
end
plot(t,y)
Semana=Sem*0.01 % La posición de la semana será (i+1)*h


1.5 Infectados con dos umbrales

2 ª Parte