Malthusian Growth Model
Prepared for the July 1995 Envision It! Workshop by Steve McKelvey, Department of Mathematics, Saint Olaf College, Northfield, Minnesota 55057.
An Early and Very Famous Population Model
In 1798 the Englishman Thomas R. Malthus posited a mathematical model
of population growth. He model, though simple, has become a basis for
most future modeling of biological populations. His essay, "An Essay
on the Principle of Population," contains an excellent discussion of
the caveats of mathematical modeling and should be required reading
for all serious students of the discipline.
Malthus's observation was that, unchecked by environmental or social
constraints, it appeared that human populations doubled every
twenty-five years, regardless of the initial population size. Said
another way, he posited that populations increased by a fixed
proportion over a given period of time and that, absent constraints,
this proportion was not affected by the size of the population.
By way of example, according to Malthus, if a population of 100
individuals increased to a population 135 individuals over the course
of, say, five years, then a population of 1000 individuals would
increase to 1350 individuals over the same period of time.
Malthus's model is an example of a model with one
parameter. A variable is the quantity we are interested in
observing. They usually change over time. Parameters are quantities
which are known to the modeler before the model is constructed. Often
they are constants, although it is possible for a parameter
to change over time.
In the Malthusian model the variable
is the population and the parameter is the population
If we let X(i) denote the population size
during time period i and let r denote the population
growth rate per unit time, the Malthusian population model can be
written mathematically in the following way:
X(i+1) = (1+r)X(i).
A model in this form, where the population at the next time period is
determined by the population at the previous time period, is said to
be a difference equation model. If we have a difference
equation model and know the population at the beginning of a time
period, we can use the model to determine population sizes at any
point in the future by applying the equation repeatedly until we reach
the desired point in time.
The Stella II software we will use to analyze these models requires the
model to be in a slightly different form. Stella is interested in
changes to population levels. So, instead of giving a
formula for X(i+1), the next time period's population, Stella
requires a formula for the change in the population from one year to
the next, namely a formula for:
Fortunately, it is easy to recast any difference equation model into the
form required by Stella. In the case at hand it is particularly easy,
simply split the (1+r)X(i) term into the sum of two terms,
X(i+1) = (1+r)X(i) = X(i)+rX(i).
Substracting X(i) from both sides gives use the equation we
are looking for:
X(i+1) - X(i) = rX(i).
This is the formulation of the Malthusian population model we will use
in our first Stella exercise.
It is always possible to convert a different equation from the form
where X(i+1) is isolated on the left hand side into the
difference form required by Stella. One way to always achieve this is
to simply substract X(i) from both sides of the difference
equation. This will leave the left hand side with the desired form
X(i+1) - X(i).
One of the important things to determine about any population model
is the set of equilibrium points for the model. An
equilibrium point is a population level from which a population will
not change. Another name for equilibrium point is
Finding an equilibrium point is simply a matter of setting the
population change to zero and then solving for the equilibrium
population. As an example, let X(*) stand for the
equilibrium population. In the Malthusian model setting the change in
population to zero gives us the equation
0 = rX(*).
Solving this equation for X(*) we see that X(*) must
be zero. (The mathematically astute will note that another solution
is for the parameter r to be zero. In this case we are
modeling a population that never grows and, thus, any population size
is an equilibrium size.) A zero population size corresponds to
extinction. Any reasonable population model (in the absence of
immigration) should include extinction as an equilibrium population
Equilibria come in two flavors, stable equilibria and
unstable equilibria. A stable equilibrium is a population
level which is attractive. If a population is "close enough" to a
stable equilibrium the population will eventually settle down to the stable
equilibrium. If a population level is near (but not precisely at) an
unstable equilibrium the population level will move quickly away from
the unstable equilibrium.
In the Malthusian case, when the parameter r has a positive
value, the steady state population of zero represents an unstable
equilibrium. According to Malthus's model, any population will grow
regardless of how many individuals currently exist in the population.
Thus, even populations near zero will eventually explode, moving away
from the zero steady state.
Under what circumstances, if
any, would it make biological sense for the
parameter r in Malthus's model to be negative?
Given a negative value of r, is extinction a stable or unstable
Building the Malthusian Model Using Stella
The next step is to build the Malthusian model using the tools
available to us with Stella. All the techniques we will need for more
sophisticated mathematical models are illustrated during the
construction of the simple Malthusian model.
Below is a cookbook list of actions required to building the model in
Stella. It is highly recommended that you actually perform the
actions being described. Reading the following list without being in
front of a Stella session is not recommended. These instructions
assume the use of the MacIntosh version of Stella II.
- Turn on the computer.
- Find the Stella II application icon and double click.
Mapping Level Actions
- Move the cursor to the process frame icon and click.
- Move the cursor to the middle of the page and click.
- Type in a name for the process, for example, "Malthus".
- Click on the downward pointing triangle in the process frame.
Construction Level Actions
- Move the process frame to the center by pressing the mouse button while
the cursor is on the top line of the frame and then dragging the
process frame to the desired location.
- Click on the stock (reservoir) icon, move the cursor to the center
of the process frame and then click again. Name the stock
- Click on the flow icon, move the cursor in the lefthand part of
the process frame. Press and drag into the stock until the stock
becomes shaded. Release the button and name the flow Pop
- Click on the connector icon. Move the cursor inside the stock,
press the button and drag the cursor into the flow until the flow
At this stage the map of the model has been completed. All the
logical connections have been made. What is left is to specify the
initial condition required by the stock
and the formula used to determine the value of the flow.
The model is now complete. The next step is to set some parameters
which tell Stella how to actually run the model.
- Click on the planet showing at the top of the of the left hand
margin. The symbol should turn into the Greek letter Chi with an
exponent of two and question marks should appear in the flow and stock.
- Double click on the stock. Enter the initial value of 1000.
Click on OK when finished.
- Double click on the flow. Enter the equation for the yearly
change in population, in this case 0.045*Population. Use the
list of variables on the upper lefthand side of the dialogue box to
reduce the likelihood of typing errors. Click on OK when finished.
To run the model select the RUN option
from the RUN menu on the top line of the screen. If all is right, not
much should happen. We haven't yet arranged for output.
- Select the Time Specs... option from the top line RUN menu. When
the dialogue box appears change the DT setting from 0.25 to 1.0. Also
change the ending time of the model to be 100 rather than 12. Lastly,
select Years as the time unit. Click on OK when finished.
Two forms of output are common from Stella models. One form is
graphical output showing how population sizes change over time. A
second is tabular output, showing table entries giving precise values
of various quantities as the model progresses. The setups for these
options are very similar. We go through the graphical setup in
- Click on an upward pointing triangle (either in the left margin
or on the process frame) to move us from the construction level to the
- Click on the graph icon found at the top of the page. Move the
cursor to any location on the page outside the process frame and click
- Double click anywhere on the body of the graph.
- Enter a title for the graph.
- Double click on Population. Notice that Population now appears in
the Selected window. This means that Population will be shown on the
- Click on OK when finished.
- Run the model again. The graph should fill in showing a steadily
To explore the results of changing the initial population or the
growth rate, Stella makes it easy to change these values. To get rid
of the graph click in the small box in the upper lefthand corner of
the graph. Next click on a downward triangle, putting you into the
construction level of Stella. To change the initial population,
double click on the stock and edit the initial condition. To change
the growth rate double click on the flow and change the formula. Then
move back up to the mapping level and click on the graph icon that is
lying on the page. The graph will reappear. Rerun the model (using
the RUN option of the RUN menu) to generate a graph under the new
conditions. Do this several times until you feel confident with
changing the various parts of the model.
In the model as originally constructed the growth rate (0.045) was
hard wired into the formula for the flow. The growth rate is a key
parameter in the Malthusian growth model. It is usually good practice
to place each parameter in a model in its own converter, and then
refer to the converter in the formula for the flow. In this case we
should move to the construction level, click on the converter icon
(the circle), place the icon within the process frame, naming it
something like "Growth Rate" and then placing a connector from the
converter to the flow. When this is done both the flow and the
converter will show a question mark. This means Stella requires a
value for the converter (0.045) and a new formula for the flow
(Growth_Rate*Population). To enter these, double click on the
converter and flow, respectively, and enter the new information in the
appropriate areas of the dialogue boxes.