# Math Modeling Models

These models and simulations have been tagged “Math Modeling”.

Related tagsSIRSIRDCoronavirusCOVID-19Non-dimensionalize

These models and simulations have been tagged “Math Modeling”.

Related tagsSIRSIRDCoronavirusCOVID-19Non-dimensionalize

Spring, 2020: in the midst of on-line courses, due to the pandemic of Covid-19.

With the onset of the Covid-19 coronavirus crisis, we focus on SIRD models, which might realistically model the course of the disease.

We start with an SIR model, such as that featured in the MAA model featured in

Without mortality, with time measured in days, with infection rate 1/2, recovery rate 1/3, and initial infectious population I_0=1.27x10-4, we reproduce their figure

With a death rate of .005 (one two-hundredth of the infected per day), an infectivity rate of 0.5, and a recovery rate of .145 or so (takes about a week to recover), we get some pretty significant losses -- about 3.2% of the total population.

Resources:

y'(t) = b y(t) (1 - y(t)/K)

where K is the carrying capacity of the quantity y.

But if we divide each side of the equation by K, we obtain

d(y/K)/dt = b (y/K) (1-y/K)

Defining a new variable w, the population relative to its carrying capacity, we obtain

dw/dt = b w (1 - w)

Finally we divide both sides by b, to write

dw/d(bt) = w (1 - w)

So if we work in dimensionless time units of bt, we have

w' = w (1 - w)

where the derivative is with respect to the variable bt=τ. .

τ=τ

This

This equation, as simple as possible, contains all the dynamics (all the ways
the population can behave), while masking the "trivialities"; but it kind of
hides the physical aspects of the problem. So it's easy to study, but harder to
interpret: alas, you can't have it all!:)

τ=1 when t=1b: so if b=.5/year, then τ=1 when t=2.

So
the larger b (the greater the birthrate), the shorter the real time t to give τ=1.

τ=τ=τ=

This is a first example of a simple SIR (Susceptible, Infected, Recovered) model.

There are three pools of individuals: those who are infected (without them, no disease!), the pool of those who are at risk (susceptible), and the recovered -- who may lose their immunity and become susceptible again.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel.nb

There are three pools of individuals: those who are infected (without them, no disease!), the pool of those who are at risk (susceptible), and the recovered -- who may lose their immunity and become susceptible again.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel.nb

116

y'(t)=by(t)(1-y(t)/K)

where K is the carrying capacity of the quantity y. Alternatively,

y'(t)=by(t) - b/K*y(t)^2

A comparable Mathematica file is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/LogisticGrowth-and-DecayModel.nb

The basic model of *Modelling the Canada lynx and snowshoe hare population cycle: The role of specialist predators (*Tyson, et al.) demonstrates logistic growth in prey, and in predator (with prey dependence for carrying capacity). But interestingly, one possibility is limit cycles, which mimic the cycling of the populations in nature.

The differential equations for the population of hare (x) is

x'(t) = rx(1-x/K)

- gamma x^2/(x^2+eta^2)

- alpha y x/(x+mu)

where K is the logistic carrying capacity of the prey (hare), in the absence of predation; the second term is a "generalist predation" term; and the third term is the "specialist predation" (in the limit as the prey gets big, this becomes simply proportional to y (the lynx population)).

The differential equations for the population of lynx (y) is

for the predator (lynx), which is essentially logistic growth. Its growth term suggests exponential growth, but there is a loss term of the form sqy^2/x -- loss is proportional to population (crowding), and inversely proportional to prey density. As the hare population goes to zero, so shall the lynx....

As one can see, the prey density won't change if y=x/q. If the prey density were not changing at the same time, the system would be at equilibrium.

In this InsightMaker model, I scaled the second equation by multiplying by q, then replace y by w=qy throughout both equations. This requires a slight change in the prey equation -- alpha replaced by the ratio of alpha/q. (I used my favorite mathematical trick, of multiplying by the appropriate form of 1!)

So what we're really looking at here is the system

x'(t) = rx(1-x/K)

- gamma x^2/(x^2+eta^2)

- alpha/q w x/(x+mu)

w'(t) = sw(1- w/x)

where w(t)=qy(t).

where w(t)=qy(t).

Tyson, et al. took q to be about 212 for hare and lynx -- so that it requires about 212 hare to allow for one lynx to survive at "equilibrium".

However, when alpha -- the hares/lynx/year -- gets sufficiently large (e.g. 1867 -- and that does seem like a lot of hares per lynx per year...:), limit cycles develop (rather than a stable equilibrium). This means that the populations oscillate about the equilibrium values, rather than stabilize at those values.

which allows one to experiment a little more easily than one can with this InsightMaker model.

Thanks Scott Fortmann-Roe for the original model.

I've added in an adjustment to handle population sizes, by dividing by moose carrying capacity.

Time is scaled by the moose birth parameter:

tau=bm*t

There are therefore only three parameters left to account for any dynamics:

beta = bw/bm (relative wolf to moose births)

delta = dm/bm (relative death to birth ratio for moose)

gamma = dw/bm (wolf deaths to moose births)

The equations are thus

dM/dtau = M [ (1-M) - delta W ]

dW/dtau = W [beta M - gamma ]

There is a stable equilibrium pair of population values, relative to the carrying capacity:

M^* = gamma / beta

W^* = (1-gamma / beta) / delta

I have a sleek version with a logistical growth term for the moose, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-sleek.nb

https://insightmaker.com/insight/2068/Isle-Royale-Predator-Prey-Interactions

Thanks Scott Fortmann-Roe.

I've created a Mathematica file that replicates the model, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker.nb

It allows one to experiment with adjusting the initial number of moose and wolves on the island.

I used steepest descent in Mathematica to optimize the parameters, with my objective data being the ratio of wolves to moose. You can try my (admittedly) kludgy code, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-BestFit.nb

{WolfBirthRateFactorStart,

WolfDeathRateStart,

MooseBirthRateStart,

MooseDeathRateFactorStart,

moStart,

woStart} =

{0.000267409,

0.239821,

0.269755,

0.0113679,

591,

23.};

Spring, 2020: in the midst of on-line courses, due to the pandemic of Covid-19.

With the onset of the Covid-19 coronavirus crisis, we focus on SIRD models, which might realistically model the course of the disease.

We start with an SIR model, such as that featured in the MAA model featured in

Without mortality, with time measured in days, with infection rate 1/2, recovery rate 1/3, and initial infectious population I_0=1.27x10-4, we reproduce their figure

With a death rate of .005 (one two-hundredth of the infected per day), an infectivity rate of 0.5, and a recovery rate of .145 or so (takes about a week to recover), we get some pretty significant losses -- about 3.2% of the total population.

Resources:

https://insightmaker.com/insight/25229/SIR-model-with-stochastic-events

for this example of adding stochasticity to the SIR model. "A simple extension of the tutorial SIR example, adding in Poisson events for infection and recovery. There is one macro, RandPoissonStep(rate)... to simulate Poisson processes."

I've tried to add in the infection step, as well as turn numbers into integers (without much luck). But it certainly has some interesting dynamics! I've also added in a phase plane graphic.

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

Spring, 2020: in the midst of on-line courses, due to the pandemic of Covid-19.

With the onset of the Covid-19 coronavirus crisis, we focus on SIRD models, which might realistically model the course of the disease.

We start with an SIR model, such as that featured in the MAA model featured in

Without mortality, with time measured in days, with infection rate 1/2, recovery rate 1/3, and initial infectious population I_0=1.27x10-4, we reproduce their figure

With a death rate of .005 (one two-hundredth of the infected per day), an infectivity rate of 0.5, and a recovery rate of .145 or so (takes about a week to recover), we get some pretty significant losses -- about 3.2% of the total population.

Resources:

https://insightmaker.com/insight/2068/Isle-Royale-Predator-Prey-Interactions

Thanks Scott Fortmann-Roe.

I've created a Mathematica file that replicates the model, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker.nb

It allows one to experiment with adjusting the initial number of moose and wolves on the island.

I used steepest descent in Mathematica to optimize the parameters, with my objective data being the ratio of wolves to moose. You can try my (admittedly) kludgy code, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-BestFit.nb

{WolfBirthRateFactorStart,

WolfDeathRateStart,

MooseBirthRateStart,

MooseDeathRateFactorStart,

moStart,

woStart} =

{0.000267409,

0.239821,

0.269755,

0.0113679,

591,

23.};

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

Spring, 2020:

We start with an SIR model, such as that featured in the MAA model featured in

Without mortality, with time measured in days, with infection rate 1/2, recovery rate 1/3, and initial infectious population I_0=1.27x10-6, we recover their figure

Resources:

https://insightmaker.com/insight/2068/Isle-Royale-Predator-Prey-Interactions

Thanks Scott Fortmann-Roe.

I've created a Mathematica file that replicates the model, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker.nb

It allows one to experiment with adjusting the initial number of moose and wolves on the island.

I used steepest descent in Mathematica to optimize the parameters, with my objective data being the ratio of wolves to moose. You can try my (admittedly) kludgy code, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-BestFit.nb

{WolfBirthRateFactorStart,

WolfDeathRateStart,

MooseBirthRateStart,

MooseDeathRateFactorStart,

moStart,

woStart} =

{0.000267409,

0.239821,

0.269755,

0.0113679,

591,

23.};

https://insightmaker.com/insight/2068/Isle-Royale-Predator-Prey-Interactions

Thanks Scott Fortmann-Roe.

I've created a Mathematica file that replicates the model, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker.nb

It allows one to experiment with adjusting the initial number of moose and wolves on the island.

I used steepest descent in Mathematica to optimize the parameters, with my objective data being the ratio of wolves to moose. You can try my (admittedly) kludgy code, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-BestFit.nb

{WolfBirthRateFactorStart,

WolfDeathRateStart,

MooseBirthRateStart,

MooseDeathRateFactorStart,

moStart,

woStart} =

{0.000267409,

0.239821,

0.269755,

0.0113679,

591,

23.};

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

The basic model of *Modelling the Canada lynx and snowshoe hare population cycle: The role of specialist predators (*Tyson, et al.) demonstrates logistic growth in prey, and in predator (with prey dependence for carrying capacity). But interestingly, one possibility is limit cycles, which mimic the cycling of the populations in nature.

The differential equations for the population of hare (x) is

x'(t) = rx(1-x/K)

- gamma x^2/(x^2+eta^2)

- alpha y x/(x+mu)

where K is the logistic carrying capacity of the prey (hare), in the absence of predation; the second term is a "generalist predation" term; and the third term is the "specialist predation" (in the limit as the prey gets big, this becomes simply proportional to y (the lynx population)).

The differential equations for the population of lynx (y) is

for the predator (lynx), which is essentially logistic growth. Its growth term suggests exponential growth, but there is a loss term of the form sqy^2/x -- loss is proportional to population (crowding), and inversely proportional to prey density. As the hare population goes to zero, so shall the lynx....

As one can see, the prey density won't change if y=x/q. If the prey density were not changing at the same time, the system would be at equilibrium.

In this InsightMaker model, I scaled the second equation by multiplying by q, then replace y by w=qy throughout both equations. This requires a slight change in the prey equation -- alpha replaced by the ratio of alpha/q. (I used my favorite mathematical trick, of multiplying by the appropriate form of 1!)

So what we're really looking at here is the system

x'(t) = rx(1-x/K)

- gamma x^2/(x^2+eta^2)

- alpha/q w x/(x+mu)

w'(t) = sw(1- w/x)

where w(t)=qy(t).

where w(t)=qy(t).

Tyson, et al. took q to be about 212 for hare and lynx -- so that it requires about 212 hare to allow for one lynx to survive at "equilibrium".

However, when alpha -- the hares/lynx/year -- gets sufficiently large (e.g. 1867 -- and that does seem like a lot of hares per lynx per year...:), limit cycles develop (rather than a stable equilibrium). This means that the populations oscillate about the equilibrium values, rather than stabilize at those values.

which allows one to experiment a little more easily than one can with this InsightMaker model.

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb

https://insightmaker.com/insight/2068/Isle-Royale-Predator-Prey-Interactions

Thanks Scott Fortmann-Roe.

I've created a Mathematica file that replicates the model, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker.nb

It allows one to experiment with adjusting the initial number of moose and wolves on the island.

I used steepest descent in Mathematica to optimize the parameters, with my objective data being the ratio of wolves to moose. You can try my (admittedly) kludgy code, at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/Moose-n-Wolf-InsightMaker-BestFit.nb

{WolfBirthRateFactorStart,

WolfDeathRateStart,

MooseBirthRateStart,

MooseDeathRateFactorStart,

moStart,

woStart} =

{0.000267409,

0.239821,

0.269755,

0.0113679,

591,

23.};

The new display includes the asymptotics: the three sub-populations will tend to fixed values as time goes to infinity; the infected population goes to zero if the recovery rate is greater than the infectivity rate -- i.e., the disease dies out.

Note the use of a "ghost" stock (for Total Population), which I think is a pretty cool idea. It cuts down on the number of arcs in the model graph.

A comparable model in Mathematica is available at

http://www.nku.edu/~longa/classes/2018spring/mat375/mathematica/SIRModel-rescaled.nb