unit25.mws

ORDINARY DIFFERENTIAL EQUATIONS POWERTOOL

Unit 25 -- Application: Population Models

Prof. Douglas B. Meade

Industrial Mathematics Institute

Department of Mathematics

University of South Carolina

Columbia, SC 29208

URL: http://www.math.sc.edu/~meade/

E-mail: meade@math.sc.edu

Copyright © 2001 by Douglas B. Meade

All rights reserved

-------------------------------------------------------------------

>

Outline of Unit 25

>

Initialization

> restart;

> with( DEtools ):

> with( plots ):

> with( linalg ):

Warning, the name changecoords has been redefined

Warning, the name adjoint has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

>

25.A Malthusian (Exponential) Model

A population with constant birth and death rates can be modeled as

> ode1 := diff( p(t), t ) = k * p(t);

ode1 := diff(p(t),t) = k*p(t)

> ic := p(0) = P[0];

ic := p(0) = P[0]

>

where p(t) denotes the size of the population at time t , k = k[birth]-k[death] is the net growth rate, and P[0] is the initial size of the population.

The solution to any Malthusian model is an exponential function

> sol1 := dsolve( { ode1, ic }, p(t) );

sol1 := p(t) = P[0]*exp(k*t)

>

If the net growth rate is positive, i.e. , k[birth] > k[death] , then the population grows (exponentially) without bound. If the net growth rate is negative, then the population decays exponentially to zero. And, if the net growth rate is zero, the population remains constant for all time: p(t) = P[0] .

While an exponential model can be useful for short-term projections, the unbounded growth is a major limitation to making long-term projections.

>

25.B Logistic Model

The logistic model addresses the unbounded growth of the Malthusian model by assuming that the growth rate starts at the net growth rate but decreases (linearly) as the population increases.

> ode2 := diff( p(t), t ) = k * ( 1 - p(t)/A ) * p(t);

ode2 := diff(p(t),t) = k*(1-p(t)/A)*p(t)

> ic;

p(0) = P[0]

>

This autonomous ODE is separable; the solution is

> q1 := dsolve( { ode2, ic }, p(t) );

q1 := p(t) = A/(1-exp(-k*t)*(-A+P[0])/P[0])

>

A more typical form for this solution is

> sol2 := subsop(2=map( collect, rhs(normal(q1)), exp ), q1);

sol2 := p(t) = -P[0]*A/((-A+P[0])*exp(-k*t)-P[0])

>

There are two equilibria for the logistic model: p = 0 and p = A . The qualitative behavior can be determined from a sign chart, or from the direction field. Unfortunately, Maple is unable to produce a direction field for general parameters, but the essential features of the model are observable with any reasonable, i.e. , positive, values of k and A .

> param2 := { k=1, A=7 }:

> DEplot( eval( ode2, param2 ), p(t), t=0..10, p=0..10 );

[Maple Plot]

>

The direction field is suggests that, when k > 0, any solution that begins with a positive initial population ultimately tends to the value of A . This shows how the logistic model overcomes the unbounded growth for exponential models. The parameter A is frequently called the carrying capacity of the population. This conjecture is supported with the symbolic computation

> assume( k > 0 ):

> limit( sol2, t=infinity );

> unassign( 'k' );

limit(p(t),t = infinity) = A

>

To see what happens when k < 0, consider

> param2 := { k=-1, A=7 }:

> DEplot( eval( ode2, param2 ), p(t), t=0..10, p=0..10 );

[Maple Plot]

>

Thus, when k < 0, the carrying capacity is a bifurcation value for solutions. If P[0] < A , solutions decay to zero and if P[0] > A , solutions grow without bound. However, the symbolic computation of the limiting population yields

> assume( k < 0 ):

> limit( sol2, t=infinity );

> unassign( 'k' ):

limit(p(t),t = infinity) = 0

>

The problem is that when the net growth rate is negative, the solution does not exist for all time. The solution exists only so long as the denominator is not zero.

> q2 := solve( denom(rhs(sol2))=0, t );

q2 := -ln(P[0]/(-A+P[0]))/k

>

This expression is not easily simplified within Maple, but is easily seen to be equivalent to

> Tblowup := 1/k * ln( 1 - A/P[0] );

Tblowup := ln(1-A/P[0])/k

>

Since A and P[0] are both positive, 0 < 1-A/P[0] < 1 when P[0] > A . Then, ln(1-A/P[0]) < 0 and the blow-up time is positive (and finite) when k < 0. This finite time blowup is difficult to see in the direction field.

If P[0] < A , the denominator is never zero and the solution exists for all time.

>

Of course, if k = 0, then the population remains unchanged, p = P[0] .

>

Another interesting feature of the logistic equation is the change of concavity for some solutions with 0 < P[0] < A . To investigate the location of this inflection point, zeroes of the second derivative of the solution must be identified:

> DDsol2 := diff( sol2, t$2 );

DDsol2 := diff(p(t),`$`(t,2)) = -2*P[0]*A*(-A+P[0])...

>

> q3 := solve( rhs(DDsol2)=0, t );

q3 := -ln(-P[0]/(-A+P[0]))/k

>

which can be simplified by hand to

> Tinflection := 1/k * ln( A/P[0] - 1 );

Tinflection := ln(A/P[0]-1)/k

>

This time is the location of a possible inflection point. The complete verification that an inflection point does occur at this time is left as an exercise. (Note that the assumptions on the parameters ensure that this time is real and positive.) At this time, the population is

> simplify( eval( sol2, t=Tinflection ) );

p(ln(-(-A+P[0])/P[0])/k) = 1/2*A

>

That is, when 0 < P[0] < A/2 the solution changes concavity when the population is exactly half of the carrying capacity. The significance of this result is that it provides a means to estimate the carrying capacity for a population from data before the population actually reaches the carrying capacity. The only requirement is to be able to locate the inflection point from the data.

>

25.C Gompertz Model

Another attempt to eliminate the unbounded growth of solutions to the Malthusian model is the Gompertz model.

> ode3 := diff( p(t), t ) = k * ( 1 - ln(p(t))/a ) * p(t);

ode3 := diff(p(t),t) = k*(1-ln(p(t))/a)*p(t)

> ic;

p(0) = P[0]

The main difference is the appearance of ln(p(t)) in the factor that modifies the net growth rate. With this change, and assuming a > 0, the effective growth rate is k when p = 1 , then decreases (logarithmically) as p increases. (For 0 < p < 1, the effective growth rate exceeds the net growth rate.)

The solution to this IVP is

> q4 := simplify( dsolve( { ode3, ic }, p(t) ) );

q4 := p(t) = exp(-exp((-k*t+ln(a-ln(P[0]))*a)/a)+a)...

>

which simplifies (manually) to

> sol3 := p(t) = exp( a ) * exp( (ln(P[0])-a)*exp(-k*t/a) );

sol3 := p(t) = exp(a)*exp((ln(P[0])-a)*exp(-k*t/a))...

>

To begin the qualitative analysis of solutions to the Gompertz model, observe that when k and a are nonzero and have the same sign

> assume( k/a > 0 ):

> limit( sol3, t=infinity );

> unassign( 'k', 'a' ):

limit(p(t),t = infinity) = exp(a)

>

A representative direction field for this situation is

> param3 := { k=1, a=ln(4.) }:

> DEplot( eval( ode3, param3 ), p(t), t=1..10, p=1..10 );

[Maple Plot]

>

When k and a have different signs,

> assume( k/a < 0 ):

> limit( sol3, t=infinity );

> unassign( 'k', 'a' ):

limit(p(t),t = infinity) = limit(exp(a)*exp((ln(P[0...

>

The reason for Maple not simplifying this limit is that the value depends on the sign of ln(P[0])-a . A representative direction field for this situation is

> param3 := { k=-1, a=ln(4.) }:

> DEplot( eval( ode3, param3 ), p(t), t=1..10, p=1..10 );

[Maple Plot]

>

Note that solutions with ln(P[0]) < a decay to zero while ln(P[0]) > a gives rise to solutions that are unbounded as time increases without bound. A key difference from the logistic equation is that these unbounded solutions exist for all time.

The direction fields suggest that some solutions have a change in concavity. The second derivative of the solution is

> DDsol3 := diff( sol3, t$2 );

DDsol3 := diff(p(t),`$`(t,2)) = exp(a)*(ln(P[0])-a)...

>

which is zero when

> Tinflect3 := solve( rhs(DDsol3)=0, t );

Tinflect3 := ln(a-ln(P[0]))*a/k

>

After it has been confirmed that this time actually is an inflection point for the solution, it is interesting to note that the inflection point occurs when the population is

> simplify( eval( sol3, t=Tinflect3 ) );

p(ln(a-ln(P[0]))*a/k) = exp(a-1)

>

Thus, the limiting population for the Gompertz model occurs when the population is a factor exp(1) larger than the population at the inflection point. (Recall that the logistic model's carrying capacity is twice the population at the change in concavity.)

>

[Back to ODE Powertool Table of Contents]

>