Modelo para epidemias (Grupo 9C, Trabajo 7)
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).
Contenido
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ónY la gráfica obtenida de la comparación de la condición en función de cada valor posible de C es:
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')
1.3 Infectados al terminar la sexta semana
Tras la sexta semana, los infectados se muestran con el siguiente programa, siendo: I(6)=4.5411e+004.