SIR_SIMULATION Simulation of Disease Propagation with the SIR Model

SIR_SIMULATION, a MATLAB program which simulates the spread of a disease through a hospital room of M by N beds, using the SIR (Susceptible/Infected/Recovered) model.

We consider the evolution of a disease in a hospital in which patients are arranged on an array of beds.

We assume that the beds form an array of M rows and N columns, so that there are a total of M * N patients.

We assume that the patients can be classified as Susceptible, Infected or Recovering, with the properties that:

• Susceptible: A patient who has never been infected with the disease. A susceptible patient can get the disease.
• Infected: A patient who has never gotten the disease. A patient stays infected for K days. On the K+1 of the disease, the patient "recovers".
• Recovered: A patient who has had the disease, that is, has caught the disease and been sick for a full K days. A recovered patient never gets sick again.

We set up an M by N array A to represent the patients. A(I,J) contains information on the patient in row I, column J. A(I,J) will be

• 0, if the patient is susceptible.
• a value between 1 and K, if the patient is infected. The value is the number of days the patient has been infected.
• -1, if the patient is recovered.

The rules for transmission of the disease essentially update the patient array once a day. If patient A(I,J) was:

• 0, then check the four neighbors A(I-1,J), A(I+1,J), A(I,J-1) and A(I,J+1). For each neighbor that is infected, pick a random number, and if that random number is less than TAU, then patient A(I,J) becomes infected, that is, we set A(I,J) to 1.
• a value between 1 and K, then the value is increased by 1. But if the value was already K, it is now reset to -1, because the patient has recovered.
• -1, nothing happens.

Quantities of interest include an animation of the day to day status of patients in the hospital (the "geometry") and the values of S, I, and R, that is, the total number of patients in each category, as it evolves over time.

Since this problem contains a probabilistic element in the transmission of disease, the outcome of any single run has limited meaning. It is much more valuable to run many simulations, and thus to get both average or "expected" values, as well as a feeling for the variance of the data from these averages.

Usage:

sir = sir_simulation ( m, n, a, k, tau, t_max )
where
• m is the number of rows of patients.
• n is the number of columns of patients.
• a is the M by N matrix of the initial patient states.
• k is the number of days a patient stays infected.
• tau is the probability that a susceptible patient will become infected because of one "nearby" infected patient (north, south, east or west) over one day.
• t_max is the total number of days to consider, counting the initial condition as day 1.

Languages:

SIR_SIMULATION is available in a MATLAB version.

Related Data and Programs:

BROWNIAN_MOTION_SIMULATION, a MATLAB program which simulates Brownian motion in an M-dimensional region.

COIN_SIMULATION, a MATLAB library which looks at ways of simulating or visualizing the results of many tosses of a fair or biased coin.

DICE_SIMULATION, a MATLAB program which simulates N tosses of M dice, making a histogram of the results.

DUEL_SIMULATION, a MATLAB program which simulates N repetitions of a duel between two players, each of whom has a known firing accuracy.

GAMBLERS_RUIN_SIMULATION, a MATLAB program which simulates the game of gambler's ruin.

HIGH_CARD_SIMULATION, a MATLAB program which simulates a situation in which you see the cards in a deck one by one, and must select the one you think is the highest and stop.

ISING_2D_SIMULATION, a MATLAB program which carries out a Monte Carlo simulation of an Ising model, a 2D array of positive and negative charges, each of which is likely to "flip" to be in agreement with neighbors.

LIGHTS_OUT, a MATLAB program which sets up the "Lights Out" game and allows a user to try to solve it.

LORENZ_SIMULATION, a MATLAB program which solves the Lorenz equations and displays the solution, for various starting conditions.

POISSON_SIMULATION, a MATLAB library which simulates a Poisson process in which events randomly occur with an average waiting time of Lambda.

RANDOM_WALK_1D_SIMULATION, a MATLAB program which simulates a random walk in a 1-dimensional region.

RANDOM_WALK_2D_AVOID_SIMULATION, a MATLAB program which simulates a self-avoiding random walk in a 2-dimensional region.

RANDOM_WALK_2D_SIMULATION, a MATLAB program which simulates a random walk in a 2-dimensional region.

RANDOM_WALK_3D_SIMULATION, a MATLAB program which simulates a random walk in a 3-dimensional region.

REACTOR_SIMULATION, a MATLAB program which a simple Monte Carlo simulation of the shielding effect of a slab of a certain thickness in front of a neutron source. This program was provided as an example with the book "Numerical Methods and Software."

ROULETTE_SIMULATION, a MATLAB program which simulates the spinning of a roulette wheel and the evaluation of certain common roulette bets.

THREE_BODY_SIMULATION, a MATLAB program which simulates the behavior of three planets, constrained to lie in a plane, and moving under the influence of gravity, by Walter Gander and Jiri Hrebicek.

TRAFFIC_SIMULATION, a MATLAB program which simulates the cars waiting to get through a traffic light.

TRUEL_SIMULATION, a MATLAB program which simulates N repetitions of a duel between three players, each of whom has a known firing accuracy.

XISING, a C program which models the variations in ferromagnetism in a material, displaying the results using X Windows.

XWAVES, a C program which simulates the behavior of solutions of certain forms of the wave equation, displaying the results using X Windows.

Reference:

1. Dianne OLeary,
Models of Infection: Person to Person,
Computing in Science and Engineering,
Volume 6, Number 1, January/February 2004.
2. Dianne OLeary,
Scientific Computing with Case Studies,
SIAM, 2008,
ISBN13: 978-0-898716-66-5,
LC: QA401.O44.

Source Code:

• sir_area_display.m, displays an area plot of the SIR percentages over time.
• sir_line_display.m, displays a line plot of the SIR percentages over time.
• sir_simulation.m, the main program, which takes user parameter values, computes the configuration for each time step, displays an image of the configuration for each time, and returns the SIR percentages.
• timestamp.m, prints the YMDHMS date as a timestamp.
• timestep_display.m, displays an image of the hospital room at each timestep, indicating the locations of suceptible, infected, and recovered patients.

Last revised on 17 March 2019.