Fundamentals 5 min read

Unveiling the Discrete Stunted Growth Model: Predicting Population Limits

This article introduces the discrete stunted (logistic) growth model, derives its difference equation, explains intrinsic growth rate and carrying capacity, analyzes equilibrium points and stability conditions, and provides Python code to visualize the relationship between growth parameter and steady‑state population.

Model Perspective
Model Perspective
Model Perspective
Unveiling the Discrete Stunted Growth Model: Predicting Population Limits

Discrete Stunted Growth Model

The discrete version of the stunted (logistic) growth model is expressed as a first‑order nonlinear difference equation:

x_{t+1}=x_t + r x_t \left(1-\frac{x_t}{N}\right)

where x_t denotes the population size at time step t , r is the intrinsic growth rate, and N represents the environmental carrying capacity.

When the intrinsic growth rate r is constant, the model reduces to a linear homogeneous difference equation whose solution is a geometric sequence, leading to unbounded exponential growth. However, limited resources impose a “stunting effect”, causing the growth rate to decline as the population approaches N , eventually reaching zero.

Assuming the growth rate decreases linearly with population size, the model becomes the discrete stunted growth model described above. The parameters r (intrinsic growth rate) and N (maximum capacity) determine the dynamics; when x_t = N , growth stops.

Alternative equivalent forms of the model can be written, for example:

x_{t+1}= (1+r) x_t - \frac{r}{N} x_t^2

To analyze equilibrium points, set x_{t+1}=x_t = x^* , yielding the algebraic equation x^* = (1+r) x^* - \frac{r}{N} (x^*)^2 . Solving gives two equilibria: x^*_1 = 0 and x^*_2 = N .

Theorem 1: The equilibrium x^*_1 = 0 is locally asymptotically stable if and only if -2 < r < 0, while the equilibrium x^*_2 = N is locally asymptotically stable if and only if -2 < r < 2.

The following Python script simulates the model for various values of k (analogous to r ) and plots the steady‑state population x^*(k) after discarding transients.

<code>import numpy as np
import matplotlib.pyplot as plt
plt.rc('text', usetex=True)
plt.rc('font', size=16)

logistic = lambda k, x: k * x * (1 - x)
kk = np.arange(0, 4.01, 0.01)
listk = []
listx = []
for k in kk:
    x = 0.5
    for i in range(1, 500):
        x = logistic(k, x)
        if i > 400:
            listk.append(k)
            listx.append(x)
plt.scatter(listk, listx, c='b', s=1)
plt.grid(True)
plt.xticks(np.arange(0, 4.01, 0.5))
plt.xlabel("$k$")
plt.ylabel("$x^*(k)$")
plt.show()
</code>

An illustrative plot of the steady‑state population versus the growth parameter is shown below.

Reference: Python Mathematics Experiment and Modeling, S. Shou‑kui & S. Xi‑jing, Science Press.

population dynamicsPython simulationlogistic modeldifference equationstability analysis
Model Perspective
Written by

Model Perspective

Insights, knowledge, and enjoyment from a mathematical modeling researcher and educator. Hosted by Haihua Wang, a modeling instructor and author of "Clever Use of Chat for Mathematical Modeling", "Modeling: The Mathematics of Thinking", "Mathematical Modeling Practice: A Hands‑On Guide to Competitions", and co‑author of "Mathematical Modeling: Teaching Design and Cases".

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.