Elaborato 3 calcolo numerico 2
A.A. 2009/2010
Cozzolino Davide 885000466
De Simone Luigi 885000538
Esercizio 1
Specifiche
Modello SIR di diffusione di un’epidemia.
Calcolare con la function MATLAB ode45 la soluzione del seguente problema:
′ () = − , 0,20
′ = −
′ =
0 = 199 ; 0 = 1; 0 = 0
Dove:
- S = suscettibili di infezione;
- I = infetti;
- R = immuni(guariti);
L’epidemia si diffonde tramite l’incontro tra S ed I, il numero di persone che passa da S ad I è proporzionale al numero di incontri secondo una costante a = costante di contagio, il numero di guariti aumenta quando sono curati secondo una costante b=costante di guarigione.
Porre b=0.1 e fare il grafico della soluzione, della percentuale di individui infetti, e determinare dopo quanto tempo si verifica il picco dell’epidemia, per diversi valori di a {0.005, 0.01, 0.05, 0.1}.
Svolgimento
Il modello SIR di diffusione di un’epidemia è stato implementato con una function in MATLAB definita nel file modelSIR.m
function f = modelSIR(t,y,b,a)
% modelSIR MODELLO SIR EPIDEMIA
% Implementa il modello SIR di una epidemia
%% Parametri di Input
% t = istante temporale in giorni
% y = vettore dei valori [S; I; R]
% S = numero di individui suscettibili all'infezione
% I = numero di individui infetti
% R = numero di individui immuni(già guariti)
% b = percentuale guarigioni al giorno (compresa tra 0 e 1)
% a = percentuale di contagio giornaliera (compresa tra 0 e 1)
%% Parametri di Output
% f = vettore dei valori [Id; Sd; Rd]
% Sd = incremento di individui suscettibili all'infezione al giorno
% Id = incremento di individui infetti al giorno
% Rd = incremento di individui immuni(già guariti) al giorno
%% Esempio di funzionamento:
% [t,y]=ode45(@modelSIR,[0 20],[1 100 0],[],0.1,0.01);
% f = [ -a*y(1)*y(2); % Sd = -a*S*I
a*y(1)*y(2)-b*y(2); % Id = a*S*I-b*I
b*y(2) % Rd = b*I];
end modelSIR.m
Successivamente, come da specifica, è stato analizzato il fenomeno di diffusione dell’epidemia secondo il modello SIR con una costante di guarigione fissata a 0.1 e costanti di contagio {0.005, 0.01, 0.05, 0.1}.
%condizioni iniziali al 1° giorno
y0=[199 1 0];
% 199 individui suscettibili da infezione, un individuo infetto e zero immuni
% popolazione totale 200 individui
b = 0.1; % percentuale (costante) di guarigione 10 su 100 al giorno
a = [0.005 0.01 0.05 0.1];
% percentuali (costanti) di contagio
% 0.0005 = un contagio per ogni coppia(infetto, infettabile) ogni 2 giorni
% 0.01 = un contagio per ogni coppia(infetto, infettabile) al giorno
% 0.05 = 5 contagi per ogni coppia(infetto, infettabile) al giorno
% 0.1 = 10 contagi per ogni coppia(infetto, infettabile) al giorno
%time = [0 20]; % intervallo di analisi del fenomeno in giorni
Imposto le condizioni iniziali dell’epidemia a 199 individui suscettibili da infezione, 1 individuo infetto e 0 soggetti immuni per un totale di una popolazione pari a 200 individui.
for index=1:fignum,
[t,y]=ode45(@modelSIR,time,y0,[],b,a(index));
% calcolo max numero di infetti
maxInfetti=max(y(:,2));
% istante di tempo corrispondente al max num di infetti
tInf=t(y(:,2)==maxInfetti);
% grafico
subplot(figrig,figcol,index);
plot(t,y./sum(y0).*100,tInf,maxInfetti./sum(y0).*100,'m*');
xlabel('giorni');
ylabel('popolazione in %');
title(['Modello SIR' 13 10 'con b=' num2str(b) ' e a=' num2str(a(index))]);
legend('Suscettibili','Infetti','Guariti');
% tempo del picco di infetti
A=['\leftarrow Picco di infetti ' num2str(ceil(tInf)) '° giorno'];
text(tInf,maxInfetti./sum(y0).*100,A,'HorizontalAlignment','left','Color','magenta');
axis([time(1) time(2) 0 100]);
disp(['Modello SIR con b=' num2str(b) ' e a=' num2str(a(index))]);
disp([' Picco di infetti a ' num2str(tInf) ' giorni']);
disp(' ');
end;
Successivamente, per le 5 d
-
Calcolo Numerico II – Elaborato
-
Calcolo Numerico II – Elaborato
-
Calcolo
-
Calcolo Numerico – Elaborato