Level 5 — MasteryPopulation & Community Ecology

Population & Community Ecology

90 minutes60 marksprintable — key stays hidden on paper

Chapter: 5.2 Population & Community Ecology Level: 5 — Mastery (cross-domain: mathematics + modelling + coding + proof) Time limit: 90 minutes Total marks: 60

Instructions: Answer all three questions. Show full derivations. Where code is requested, write clean, runnable Python (NumPy/Matplotlib/SciPy assumed available). Justify all biological interpretations with reference to named subtopics.


Question 1 — Logistic Growth: Analysis, Proof & Simulation (24 marks)

The continuous logistic model for a single population is

dNdt=rN(1NK),N(0)=N0, 0<N0<K.\frac{dN}{dt} = rN\left(1 - \frac{N}{K}\right), \qquad N(0)=N_0,\ 0<N_0<K.

(a) Solve the ODE exactly to obtain N(t)N(t) in closed form. Show every integration step (partial fractions). (6)

(b) Prove that the population growth rate dN/dtdN/dt is maximised at N=K/2N=K/2, and state the value of that maximum rate. Explain what this inflection point means for carrying capacity (5.2.3). (5)

(c) Using the closed form from (a), derive an expression for the time tt^{*} at which N(t)=K/2N(t^{*})=K/2. (4)

(d) Contrast the logistic solution with the exponential model dN/dt=rNdN/dt = rN (5.2.2): give the exponential solution and state, with a limit argument, the condition under which logistic growth is well-approximated by exponential growth. (4)

(e) Write a Python function logistic(r, K, N0, t) returning N(t)N(t) using the closed form, and a snippet that plots the curve for r=0.5r=0.5, K=1000K=1000, N0=10N_0=10 over t[0,30]t\in[0,30], marking the inflection point. (5)


Question 2 — Predator–Prey Dynamics & Density Dependence (22 marks)

Consider the Lotka–Volterra predator–prey system

dxdt=αxβxy,dydt=δxyγy,\frac{dx}{dt} = \alpha x - \beta x y, \qquad \frac{dy}{dt} = \delta x y - \gamma y,

where xx is prey density and yy is predator density, all constants positive.

(a) Find all equilibrium (fixed) points of the system. (4)

(b) For the non-trivial (coexistence) equilibrium, compute the Jacobian and show that its eigenvalues are purely imaginary, hence classify the equilibrium. State the biological meaning for predation cycles (5.2.7). (7)

(c) Show that the quantity V(x,y)=δxγlnx+βyαlnyV(x,y) = \delta x - \gamma \ln x + \beta y - \alpha \ln y is a conserved quantity (dV/dt=0dV/dt = 0) along trajectories. (5)

(d) The classic model has no density-dependent self-limitation of prey. Modify the prey equation to include a logistic term and explain, referencing density-dependent vs density-independent factors (5.2.4), how this changes the long-term behaviour qualitatively. (3)

(e) Write Python (using scipy.integrate.odeint or solve_ivp) to numerically integrate the original system for α=1.1, β=0.4, δ=0.1, γ=0.4\alpha=1.1,\ \beta=0.4,\ \delta=0.1,\ \gamma=0.4, x0=10, y0=5x_0=10,\ y_0=5, over t[0,50]t\in[0,50]. (3)


Question 3 — Survivorship, r/K Strategy & Biodiversity Index (14 marks)

(a) The three idealised survivorship curves (Type I, II, III) can be modelled by plotting log10(lx)\log_{10}(l_x) against age, where lxl_x is the fraction surviving to age xx. State the shape of each curve and link each to an r- or K-selected life history (5.2.5, 5.2.6). (4)

(b) A cohort of 1000 individuals shows a Type II (constant mortality) curve with a per-interval survival probability of 0.70.7. Derive lxl_x as a function of interval xx, and compute l3l_3. (3)

(c) A community sample gives species counts: A = 40, B = 30, C = 20, D = 10 (total 100). Compute Simpson's Diversity Index D=1pi2D = 1 - \sum p_i^2 and the Shannon index H=pilnpiH = -\sum p_i \ln p_i. Interpret their magnitudes in the context of biodiversity importance (5.2.11). (5)

(d) Define a keystone species and, in one or two sentences, explain why removing one may reduce the diversity indices computed in (c) more than removing a numerically dominant competitor (5.2.10). (2)

Answer keyMark scheme & solutions

Question 1

(a) Separate variables: dNN(1N/K)=rdt.\int \frac{dN}{N(1-N/K)} = \int r\,dt. Partial fractions: 1N(1N/K)=1N+1/K1N/K\dfrac{1}{N(1-N/K)} = \dfrac{1}{N} + \dfrac{1/K}{1-N/K}. (1) Integrate: lnNln(1N/K)=rt+C\ln N - \ln(1-N/K) = rt + C, i.e. lnN1N/K=rt+C\ln\dfrac{N}{1-N/K}=rt+C. (2) At t=0t=0: C=lnN01N0/KC=\ln\dfrac{N_0}{1-N_0/K}. (1) Solve for NN: N(t)=K1+(KN0N0)ert.\boxed{N(t) = \frac{K}{1 + \left(\frac{K-N_0}{N_0}\right)e^{-rt}}}. (2)

(b) Let f(N)=rN(1N/K)=rNrN2/Kf(N)=rN(1-N/K)=rN - rN^2/K. Then f(N)=r2rN/K=0N=K/2f'(N)=r - 2rN/K = 0 \Rightarrow N=K/2. (2) f(N)=2r/K<0f''(N) = -2r/K < 0, so it's a maximum. (1) Maximum rate f(K/2)=r(K/2)(11/2)=rK4f(K/2) = r(K/2)(1-1/2) = \dfrac{rK}{4}. (1) Interpretation: population grows fastest at half carrying capacity; as NKN\to K growth rate 0\to 0, so KK is the stable ceiling the density approaches (5.2.3). (1)

(c) Set N(t)=K/2N(t^*)=K/2: 1+(KN0N0)ert=21+\left(\frac{K-N_0}{N_0}\right)e^{-rt^*}=2, so ert=N0KN0e^{-rt^*}=\frac{N_0}{K-N_0}. t=1rln ⁣(KN0N0).\boxed{t^* = \frac{1}{r}\ln\!\left(\frac{K-N_0}{N_0}\right)}. (4) (2 for algebra, 2 for final form)

(d) Exponential: N(t)=N0ertN(t)=N_0 e^{rt}. (1) As NKN\ll K, 1N/K11-N/K\to 1, so dN/dtrNdN/dt\approx rN → early-phase logistic growth ≈ exponential (limit KK\to\infty or N/K0N/K\to0). (2) Condition: N0KN_0 \ll K / early times. (1)

(e)

import numpy as np, matplotlib.pyplot as plt
def logistic(r, K, N0, t):
    return K / (1 + ((K - N0)/N0)*np.exp(-r*t))
t = np.linspace(0, 30, 400)
r, K, N0 = 0.5, 1000, 10
N = logistic(r, K, N0, t)
tstar = (1/r)*np.log((K-N0)/N0)          # inflection time
plt.plot(t, N); plt.scatter([tstar],[K/2], color='red')
plt.xlabel('t'); plt.ylabel('N'); plt.show()

(3 for correct function, 2 for plot + inflection marking)


Question 2

(a) Set both derivatives to 0. x(αβy)=0x(\alpha-\beta y)=0, y(δxγ)=0y(\delta x-\gamma)=0. Fixed points: (0,0)(0,0) and (γδ,αβ)\left(\dfrac{\gamma}{\delta}, \dfrac{\alpha}{\beta}\right). (4)

(b) Jacobian: J=(αβyβxδyδxγ).J=\begin{pmatrix}\alpha-\beta y & -\beta x\\ \delta y & \delta x-\gamma\end{pmatrix}. At (x,y)=(γ/δ, α/β)(x^*,y^*)=(\gamma/\delta,\ \alpha/\beta): αβy=0\alpha-\beta y^*=0, δxγ=0\delta x^*-\gamma=0, so J=(0βγ/δδα/β0).J^*=\begin{pmatrix}0 & -\beta\gamma/\delta\\ \delta\alpha/\beta & 0\end{pmatrix}. (3) Characteristic: λ2trλ+det=0\lambda^2 - \text{tr}\,\lambda + \det = 0; tr=0\text{tr}=0, det=(βγ/δ)(δα/β)=αγ>0\det = (\beta\gamma/\delta)(\delta\alpha/\beta)=\alpha\gamma>0. So λ2=αγ\lambda^2 = -\alpha\gamma, λ=±iαγ\lambda = \pm i\sqrt{\alpha\gamma} — purely imaginary. (3) Classification: centre → neutrally stable closed orbits ⇒ sustained predator–prey oscillations, predator lagging prey (5.2.7). (1)

(c) dVdt=(δγ/x)x˙+(βα/y)y˙\dfrac{dV}{dt}=(\delta-\gamma/x)\dot x + (\beta-\alpha/y)\dot y. (1) x˙=x(αβy)\dot x = x(\alpha-\beta y), y˙=y(δxγ)\dot y=y(\delta x-\gamma). (δγ/x)x(αβy)=(δxγ)(αβy)(\delta-\gamma/x)x(\alpha-\beta y) = (\delta x-\gamma)(\alpha-\beta y). (1) (βα/y)y(δxγ)=(βyα)(δxγ)(\beta-\alpha/y)y(\delta x-\gamma) = (\beta y-\alpha)(\delta x-\gamma). (1) Sum =(δxγ)[(αβy)+(βyα)]=(δxγ)(0)=0=(\delta x-\gamma)[(\alpha-\beta y)+(\beta y-\alpha)] = (\delta x-\gamma)(0)=0. (2)VV conserved.

(d) Modified prey eq: x˙=αx(1x/K)βxy\dot x = \alpha x(1-x/K) - \beta x y. (1) The logistic term is density-dependent (self-limitation intensifies as xx rises), unlike density-independent factors (e.g. weather). It damps the neutral cycles into a stable spiral/focus converging to a fixed point rather than perpetual oscillation (5.2.4). (2)

(e)

import numpy as np
from scipy.integrate import solve_ivp
a,b,d,g = 1.1, 0.4, 0.1, 0.4
def f(t, z):
    x,y = z
    return [a*x - b*x*y, d*x*y - g*y]
sol = solve_ivp(f, [0,50], [10,5], t_eval=np.linspace(0,50,1000))
# sol.y[0]=prey, sol.y[1]=predator

(3 marks: correct RHS, params, integration call)


Question 3

(a) (4)

  • Type I: convex, low early/mid mortality, sharp late drop → K-selected (large mammals, humans).
  • Type II: straight line (log scale), constant mortality per age → intermediate (birds, rodents).
  • Type III: concave, very high juvenile mortality, few survive to reproduce → r-selected (fish, insects, many plants). (1 each shape, 1 for r/K links)

(b) Constant survival s=0.7s=0.7lx=sx=0.7xl_x = s^x = 0.7^x. (2) l3=0.73=0.343l_3 = 0.7^3 = 0.343. Survivors ≈ 343343 of 1000. (1)

(c) p=(0.4,0.3,0.2,0.1)p = (0.4,0.3,0.2,0.1). pi2=0.16+0.09+0.04+0.01=0.30\sum p_i^2 = 0.16+0.09+0.04+0.01 = 0.30. Simpson D=10.30=0.70D = 1-0.30 = \boxed{0.70}. (2) Shannon H=(0.4ln0.4+0.3ln0.3+0.2ln0.2+0.1ln0.1)H = -(0.4\ln0.4 + 0.3\ln0.3 + 0.2\ln0.2 + 0.1\ln0.1) =(0.36650.36120.32190.2303)=1.2799= -(-0.3665 -0.3612 -0.3219 -0.2303) = \boxed{1.2799}. (2) Interpretation: high DD (≈0.7, near max 0.75 for 4 spp) and moderate–high HH indicate fairly even, diverse community; greater diversity confers stability/resilience and ecosystem function (5.2.11). (1)

(d) A keystone species exerts a disproportionately large effect on community structure relative to its abundance (5.2.10). Its removal can release a competitor or collapse a trophic interaction, causing secondary extinctions and a larger drop in D/HD/H than losing an abundant but functionally redundant dominant. (2)

[
  {"claim":"Logistic max growth rate at N=K/2 equals rK/4","code":"r,K,N=symbols('r K N',positive=True); f=r*N*(1-N/K); crit=solve(diff(f,N),N)[0]; result=(simplify(crit-K/2)==0) and (simplify(f.subs(N,K/2)-r*K/4)==0)"},
  {"claim":"Inflection time t*=(1/r)ln((K-N0)/N0) for N0=10,K=1000,r=0.5 gives ~9.19","code":"r,K,N0=0.5,1000,10; tstar=(1/r)*ln(Rational(K-N0,N0)); result=abs(float(tstar)-9.1901)<1e-3"},
  {"claim":"Simpson D=0.70 and l_3=0.343","code":"ps=[Rational(4,10),Rational(3,10),Rational(2,10),Rational(1,10)]; D=1-sum(p**2 for p in ps); l3=Rational(7,10)**3; result=(D==Rational(7,10)) and (l3==Rational(343,1000))"},
  {"claim":"Shannon H approx 1.2799","code":"ps=[0.4,0.3,0.2,0.1]; H=-sum(p*ln(p) for p in ps); result=abs(float(H)-1.27985)<1e-3"},
  {"claim":"LV coexistence eigenvalues purely imaginary: det=alpha*gamma, trace=0","code":"a,b,d,g=symbols('a b d g',positive=True); J=Matrix([[0,-b*g/d],[d*a/b,0]]); result=(J.trace()==0) and (simplify(J.det()-a*g)==0)"}
]