In [1]:
from scipy.integrate import odeint
${\displaystyle \tau {dp(t) \over dt} = p(t)(k-p(t))},$
where $p(t)$ y the population size at generation $t$, $k$ is the maximal size of the population, and $\tau$ a proportionality factor
In [2]:
def diff(p, generation):
"""
Returns the as size of the population as a function of the generation
defined in the following differential equation:
dp/dg = p*(k-p)/tau,
where p is the population size, g is the generation index, k is
the maximal population size (fixed to 1000) and tau a constant that describes the
number of individuals per generation (fixed to 1e4)
p -- (int) population size, dependent variable
generation -- (int) generation index, independent variable
"""
tau = 1e4 # rate of individuals per generation
pMax = 1000 # max population size
return (p * (pMax-p) ) / tau
In [3]:
# define the independent variable (i.e., generations)
g = np.arange(200) # 200 generations
In [4]:
# solve the differential equation
p = odeint(diff, 2, g) # initial conditions is 2 individuals
In [5]:
# plot the solution
plt.plot(g,p);
plt.ylabel('Population size');
plt.xlabel('Generation');
In [6]:
def diff2(p, generation, tau, pMax):
"""
Returns the as size of the population as a function of the generation
defined in the following differential equation:
dp/dg = p*(pMax-p/tau,
where p is the population size, g is the generation index, pMax is
the maximal population size and tau a constant that describes the
number of individuals per generation
p -- (int) population size
generation -- (int) generation index
pMax -- (int) maximal number of individuals in a population
tau -- (float) rate of individuals per generation
"""
return (p*(pMax-p))/tau
In [7]:
y = odeint(diff2, 2, g, args=(1e4, 1000)) # initial conditions is 2 individuals, tau = 1e4, pMax = 1000
In [8]:
# plot the solution
plt.plot(g,y);
plt.ylabel('Population size');
plt.xlabel('Generation');