ORDINARY DIFFERENTIAL EQUATIONS POWERTOOL
Unit 3 -- Application: Exponential and Logistic Growth
Industrial Mathematics Institute
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 for Unit 3
>
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
>
3.A Exponential Growth and Decay
The general model for exponential growth and decay with "growth" constant
, is
> ode := diff( x(t), t ) = k * x(t);
>
and initial condition
> ic := x(0) = A;
>
This equation is seen to be separable, and Maple agrees with this classification
> odeadvisor( ode, [separable] );
>
To find the general solution from first principles,
> impl_soln := subs( _t=t, map( int, ode/x(t), t=0.._t ) );
> impl_part_soln := subs( ic, impl_soln );
> expl_part_soln := op(solve( impl_part_soln, {x(t)} ));
>
Of course, the same result could be obtained from
> infolevel[dsolve] := 3:
> soln2 := dsolve( {ode, ic}, x(t), [separable] );
> infolevel[dsolve] := 0:
Classification methods on request
Methods to be used are: [separable]
Trying to isolate the derivative dx/dt...
Successful isolation of dx/dt
----------------------------
* Tackling ODE using method: separable
-> Trying classification methods
trying separable
separable successful
> simplify( soln2 );
>
The doubling time for a process growing exponentially is the time needed for the quantity to double from its original size. That is, the time
such that
.
> double_eqn := subs( t=t[d], x(t[d])=2*x(0), ic, expl_part_soln );
> double_time := solve( double_eqn, {t[d]} );
>
One of the important characteristics of the doubling time is that not only is it the time needed for the initial size to double, it is the time needed for the size to double at any point in an exponential process.
> q1 := x(T+t[d])/x(T)
> = subs( t=T+t[d],
> rhs(expl_part_soln) ) / subs( t=T, rhs(expl_part_soln) );
> q1;
> `` = simplify(eval( rhs(q1), double_time ));
>
The half-life for a quantity that is decaying according to an exponential model is the time after which exactly half the original amount remains.
> half_eqn := subs( t=t[h], x(t[h])=1/2*x(0), ic, expl_part_soln );
> half_time := solve( half_eqn, {t[h]} );
>
Note that
<0 for a decaying process. Thus, the half-life for an exponential model with "growth" rate
is the same as the doubling time for an exponential model with growth rate
.
>
The general logistic equation is a modification of the exponential model in which the growth is tempered by the factor (
).
> logistic_ode := diff( x(t), t ) = A * x(t) * ( K - x(t) );
>
with initial condition
> logistic_ic := x(0)=X[0];
>
This ODE is easily separated,
> sep_log_ode := logistic_ode / (x(t)*(K-x(t)));
>
integrated from the initial time, 0, to any other time t,
> part_log_soln := subs( _t=t, logistic_ic, map(int,sep_log_ode,t=0.._t) );
>
and solved for
to obtain the explicit solution
> part_expl_soln := collect(op( solve( part_log_soln, {x(t)} ) ),exp);
A quick check that this is, in fact, a solution to the original ODE shows
> odetest( part_expl_soln, logistic_ode );
>
and, for the initial condition,
> eval( part_expl_soln, t=0 );
>
Before discussing the generic properties of the logistic model, it is instructive to use graphical methods to examine a specific example. Let
> param := { A = 1/2, K=3 };
> l_ode := subs(param,logistic_ode);
>
Then, the direction field for this model is
> DEplot( l_ode, x(t), t=0..10, x=0..10, arrows=SMALL );
>
The equilibrium solution at
is obvious in the graph (and the equation); the equilibrium at
is obvious from the equation. Initial conditions that will produce the equilibrium solutions are
> equil_ic := [ [x(0)=0], [x(0)=3] ];
> equil_plot := DEplot( l_ode, x(t), t=0..5, equil_ic, x=0..10,
> arrows=SMALL, linecolor=CYAN ):
> equil_plot;
>
A sample of solutions with initial conditions between the two equilibria
> ic1 := [ [x(0)=i/2] $ i=1..5 ]:
> soln_plot1 := DEplot( l_ode, x(t), t=0..5, ic1, x=0..10, arrows=SMALL,
> linecolor=GREEN ):
> soln_plot1;
>
Note that all of these solutions are increasing and appear to approach
as
continues to increase.
Next, a sample of solutions with initial conditions above the positive equilibrium
> ic2 := [ [x(0)=2*i] $ i=2..5 ]:
> soln_plot2 := DEplot( l_ode, x(t), t=0..5, ic2, x=0..10, arrows=SMALL,
> linecolor=BLUE, stepsize=0.1 ):
> soln_plot2;
>
These solutions are all decreasing and also appear to approach the
as
increases.
The composite plot is
> display( [equil_plot, soln_plot1, soln_plot2] );
>
To investigate some of the general properties of solutions to the logistic equation, note that the equilibrium solutions are
> equil_sol := solve( rhs(logistic_ode)=0, {x(t)} );
>
A quick inspection of the ODE shows that
> 0 when 0 <
<
and
< 0 when
>
. The long-term behavior of the solutions can be determined from the explicit solution to the IVP
> limit_size := Limit( part_expl_soln, t=infinity );
> value( limit_size );
>
Maple is unable to evaluate this limit because it is unable to decide if
tends to
or
(or does not exist). However, under the physical assumptions,
> assume( A>=0, K>0 );
>
the limiting size is found to be
> value( limit_size );
>
Because all solutions with
>
decrease to
and all solutions with 0 <
<
increase to
, the parameter
is known as the carrying capacity of the logistic equation.
> unassign('A','K');
>
[Back to ODE Powertool Table of Contents]
>