Question: codes for this problem: ____________________________________________________________________________ CODE 1: function sid_determ % Simulation of a deterministic SIRD model using a differential % equation solver. params.b = 0.02;

codes for this problem: codes for this problem: ____________________________________________________________________________ CODE 1: function sid_determ % Simulation of

____________________________________________________________________________

CODE 1:

function sid_determ

% Simulation of a deterministic SIRD model using a differential % equation solver.

params.b = 0.02; % infection rate params.m = 0.1; % pathogen-induced mortality rate params.r = 0.3; % rate of recovery

initial.S = 50; % number of susceptible individuals initial.I = 1; % number of infected individuals initial.R = 0; % number of recovered individuals initial.D = 0; % number of dead people

end_time = 100; % end of simulation time span starting a 0

[t, y] = ode45(@(t, x) derivative(t, x, params), ... [0 end_time], ... [initial.S; initial.I; initial.R; initial.D], ... []); % extract result vectors outS = y(:,1); outI = y(:,2); outR = y(:,3); outD = y(:,4);

figure plot (t, y); grid xlabel ('time'); ylabel ('number of individuals'); legend('susceptible','infected','recovered','dead') set(gca,'fontsize',14)

function f = derivative (t, x, params) % Calculates the derivatives of the SIRD model. The output is a list with % the derivatives dS/dt, dI/dt and dR/dt at time t.

S = x(1); I = x(2); R = x(3); D = x(4); ds = -params.b * I * S; di = params.b * I * S - (params.m + params.r) * I; dr = params.r * I dd = params.m * I; f = [ds; di; dr; dd];

____________________________________________________________________

CODE 2:

function sid_run % Simulation of the stochastic SIR model

params.b = 0.02; % infection rate params.m = 0.1; % pathogen-induced mortality rate params.r = 0.3; % rate of recovery

initial.S = 50; % number of susceptible individuals initial.I = 1; % number of infected individuals initial.R = 0; % number of recovered individuals initial.D = 0; % number of dead people

end_time = 100; % end of simulation time span starting a 0 run_count = 200; % number of runs

result.time = []; % collects the time results result.S = []; % collects the S results result.I = []; % collects the I results result.R = []; % collects the R results result.D = []; % collects the D results

% simulate several stochastic SIR models and collect data for n=1:run_count out = sid (params, initial, end_time); result.time = [result.time out.time]; result.S = [result.S out.S]; result.I = [result.I out.I]; result.R = [result.R out.R]; result.D = [result.D out.D]; end

% extract unique times and the corresponding data [time, m, n] = unique(result.time); S = result.S(m); I = result.I(m); R = result.R(m); D = result.D(m);

% calculate running averages N = 50; % number of samples in the average j = 1; for i=1:N:length(time)-N+1 meanTime(j) = mean(time(i:i+N-1)); meanS(j) = mean(S(i:i+N-1)); meanI(j) = mean(I(i:i+N-1)); meanR(j) = mean(R(i:i+N-1)); meanD(j) = mean(D(i:i+N-1)); j = j + 1; end

% plot result figure plot (meanTime, meanS); hold plot (meanTime, meanI,'r'); plot (meanTime, meanR,'m'); plot (meanTime, meanD,'k'); grid xlabel ('time'); ylabel ('number of individuals'); legend('susceptible','infected','recovered','dead') set(gca,'fontsize',14)

_______________________________________________________________________

CODE 3:

function result = sid (params, initial, end_time)

% Simulation of the stochastic SIRD model: % % dS/dt = -b*S*I % dI/dt = b*S*I - m*I - r*I % dR/dt = r*I % dD/dt = m*I % % where % % S = susceptible, I = infected, R = recovered, D = dead % b = infection rate, r = recovery rate, m = mortality rate

state = initial; % holds the state variables S, I and R

result.time = []; % receives the time results result.S = []; % receives the S results result.I = []; % receives the I results result.R = []; % receives the R results result.D = []; % receives the D results

time = 0; while (time 0) % calculate process rates (probability/time) for current state a = rates(state, params);

% WHEN does the next process happen? %tau = exprnd(1/sum(probs)); % exprnd(mu) returns dist 1/mu*exp(-x/mu)

tau = -(1/sum(a))*log(rand(1)); % mu = 1/sum(a) %update time time = time + tau; % determine WHICH process happens after tau which = process(a); % update state switch which case 1 % S infected state.S = state.S - 1; state.I = state.I + 1; case 2 % I dies state.I = state.I - 1; state.D = state.D + 1; case 3 % I recovers state.I = state.I - 1; state.R = state.R + 1; end % store results result.time = [result.time time]; result.S = [result.S state.S]; result.I = [result.I state.I]; result.R = [result.R state.R]; result.D = [result.D state.D]; end

%--------------------------------------- function which = process (a) % Determines which process happens

r = rand * sum(a); which = 1; s = a(1); while (r > s) which = which + 1; s = s + a(which); end

%---------------------------------------- function a = rates (state, params) % Calculates process probabilities/time for given state and parameters

a(1) = params.b * state.S * state.I; % infection of susceptible a(2) = params.m * state.I; % death of infected a(3) = params.r * state.I; % recovery of infected

See the codes uploaded with this assignment that simulate a stochastic version of an SIRD (susceptible infected-recovered-dead) epidemic model. The deterministic equations are where b, r and m are the infection, recovery and mortality rates, respectively. Also included is code to solve these deterministic equations directly. Run both codes, and try to understand especially what's going on in the stochastic version. Explain the details. You may want to investigate the Gillespie algorithm

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!