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 variable and 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 growth rate.

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, giving

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.

NOTE: 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 steady state.

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 size.

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.


  1. 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 steady state?

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.

Initial Steps

Mapping Level Actions

Construction Level Actions

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. 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.

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 detail.


  1. 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.
  2. 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.