The logistic equation
The Belgian mathematician Pierre Verhulst (1804-1849) published a mathematical model of population growth in 1845, and used the census data taken in the United States from 1790 to 1840 inclusive to extrapolate into the future. His predictions were astonishingly accurate for the next several decades, despite such intervening events as the Civil War and the Industrial Revolution.
His model was based upon correcting the basic exponential growth law (which assumes constant growth rate forever.) Biological populations tend to grow exponentially in the early stages, but the growth rate diminishes and the population size levels off when the population gets large - because of limited resources...
The level " K " at which the population size levels off is called "carrying capacity" (of the environment).
The idea then is to replace the growth constant k (in the exponential model) by a changing quantity which gets smaller when the population increases and approaches zero when the population approaches carrying capacity.
This is accomplished in the differential equation
, called the
"logistic growth law"
.
-
When P is very small
(compared to the carrying capacity) the factor (1-P/K) is about 1, and the differential equation is essentially the exponential growth law
.
-
When P gets close to the carrying capacity K
, P/K is close to 1 so that
is close to zero, so that the growth rate is close to 0 and the population size hardly changes. (...it levels off...)
An alternative way to write this differential equation is
. (Simply multiply out the right hand side of the logistic growth law and set
.)
Verhultst solved this differential equation and fitted the solution to US population data to estimate the constants in the model. He found that the values
and
created a well fitting curve to the existing data.
Let's solve the differential equation using Verhulst's values of a and b .
The solution of this equation is called a logistic function .
> restart:
> k:=.03134; b:=1.5887*10^(-10);
> solution:=dsolve(diff(P(t),t)=k*P(t)-b*P(t)^2,P(t));
Well, maybe this looks a little nasty to you, but... the good thing is that you don't have to worry about how complicated it is, and Maple doesn't care...
Since we can choose _C1 to have any value, we have infinitely many solutions. Different values of _C1 correspond to different initial populations (but it is not clear which C goes with which initial population...). Instead of figuring out this connection, we can incorporate the initial population into the dsolve-command, as we saw earlier:
> solution:=dsolve({diff(P(t),t)=k*P(t)-b*P(t)^2,P(0)=P0},P(t));
... remember: don't worry about what this looks like! If it scares you change the " ; " to " : ", and don't look at the formula. All you need to know is that Maple gave you a bunch of equations which look like "P(t)=blabla (t, P0)", where t is time and P0 is the population at time 0, and that these equations list those functions which satisfy the differential equation. (Different choices of P0 will lead to slightly different functions.)
The next command, unapply , takes the expression on the right of "P(t)=blabla (t, P0)", namely the "blabla(t,P0)" and changes it into a function, one which maps any value of t to the expression "blabla(t,P0)", and if we then choose a value for P0, then the resulting function is the one and only population function which satisfies the differential equation and has the d3esired initial population. We call this function " logistic ":
> logistic:=unapply(rhs(solution),t);
Now we choose an initial population of 1 million:
> P0:=1000000;
We can now calculate the value of P(t) at any point in time
> logistic(0);logistic(1);logistic(2);
See the population growing from one year to the next.
Let us compare the graphs of three such populations, all satisfying the same logistic growth law, but with different initial conditions:
> P0:=3900000;
> plot1:=plot(logistic(t),t=0..300,color=blue):
> P0:=50000000;
> plot2:=plot(logistic(t),t=0..300,color=red):
> P0:=500000000;
> plot3:=plot(logistic(t),t=0..300,color=black):
> with(plots):
> display({plot1,plot2,plot3});
Independent of the initial population size, the population appears to approach the same limiting value.
> P0:=3900000;
> limit=limit(logistic(t),t=infinity);
> P0:=5000000;
> limit=limit(logistic(t),t=infinity);
> P0:=500000000;
> limit=limit(logistic(t),t=infinity);
The limiting population for the solution of our differential equation is just under 200,000,000.
>