Path: blob/main/latex-templates/templates/biology/logistic_growth.tex
51 views
unlisted
% Logistic Growth Model Template1% Topics: Carrying capacity, Allee effect, competition, harvesting2% Style: Research article with ecological applications34\documentclass[a4paper, 11pt]{article}5\usepackage[utf8]{inputenc}6\usepackage[T1]{fontenc}7\usepackage{amsmath, amssymb}8\usepackage{graphicx}9\usepackage{siunitx}10\usepackage{booktabs}11\usepackage{subcaption}12\usepackage[makestderr]{pythontex}1314% Theorem environments15\newtheorem{definition}{Definition}[section]16\newtheorem{theorem}{Theorem}[section]17\newtheorem{example}{Example}[section]18\newtheorem{remark}{Remark}[section]1920\title{Logistic Growth Models: Density Dependence and Population Regulation}21\author{Quantitative Ecology Research}22\date{\today}2324\begin{document}25\maketitle2627\begin{abstract}28This study presents a comprehensive analysis of logistic population growth models and29their extensions. We examine the classic logistic equation, the Allee effect (positive30density dependence at low populations), interspecific competition, and sustainable31harvesting strategies. Computational analysis demonstrates population dynamics under32various parameter regimes and identifies optimal management strategies for harvested33populations.34\end{abstract}3536\section{Introduction}3738The logistic growth model represents a fundamental advance over exponential growth by39incorporating density-dependent regulation through carrying capacity. Extensions of this40model address important ecological phenomena including Allee effects and species competition.4142\begin{definition}[Logistic Growth]43The logistic growth equation describes population dynamics with density-dependent regulation:44\begin{equation}45\frac{dN}{dt} = rN\left(1 - \frac{N}{K}\right)46\end{equation}47where $r$ is the intrinsic growth rate and $K$ is the carrying capacity.48\end{definition}4950\section{Theoretical Framework}5152\subsection{Classic Logistic Model}5354\begin{theorem}[Logistic Solution]55The analytical solution of the logistic equation is:56\begin{equation}57N(t) = \frac{K}{1 + \left(\frac{K - N_0}{N_0}\right)e^{-rt}}58\end{equation}59The population approaches $K$ asymptotically with an inflection point at $N = K/2$.60\end{theorem}6162\begin{remark}[Maximum Sustainable Yield]63The growth rate $dN/dt$ is maximized when $N = K/2$, yielding the maximum sustainable64yield (MSY): $\text{MSY} = rK/4$.65\end{remark}6667\subsection{Allee Effect}6869\begin{definition}[Allee Effect]70The Allee effect describes reduced per capita growth rate at low population densities due71to difficulties in mate finding, reduced group defense, or inbreeding. A strong Allee72effect creates a critical population threshold $A$ below which extinction occurs:73\begin{equation}74\frac{dN}{dt} = rN\left(1 - \frac{N}{K}\right)\left(\frac{N}{A} - 1\right)75\end{equation}76\end{definition}7778\subsection{Competition Models}7980\begin{theorem}[Lotka-Volterra Competition]81For two competing species:82\begin{align}83\frac{dN_1}{dt} &= r_1 N_1 \left(1 - \frac{N_1 + \alpha_{12} N_2}{K_1}\right) \\84\frac{dN_2}{dt} &= r_2 N_2 \left(1 - \frac{N_2 + \alpha_{21} N_1}{K_2}\right)85\end{align}86where $\alpha_{ij}$ is the competition coefficient (effect of species $j$ on species $i$).87\end{theorem}8889\subsection{Harvesting}9091\begin{definition}[Harvesting Strategies]92Common harvesting models include:93\begin{itemize}94\item \textbf{Constant harvest}: $dN/dt = rN(1 - N/K) - H$95\item \textbf{Proportional harvest}: $dN/dt = rN(1 - N/K) - qEN$96\item \textbf{Threshold harvest}: Harvest only when $N > N_{threshold}$97\end{itemize}98where $H$ is harvest rate, $q$ is catchability, and $E$ is effort.99\end{definition}100101\section{Computational Analysis}102103\begin{pycode}104import numpy as np105import matplotlib.pyplot as plt106from scipy.integrate import odeint107from scipy.optimize import fsolve108109np.random.seed(42)110111# Model definitions112def logistic(N, t, r, K):113return r * N * (1 - N/K)114115def allee(N, t, r, K, A):116if N <= 0:117return 0118return r * N * (1 - N/K) * (N/A - 1)119120def logistic_harvest(N, t, r, K, H):121return r * N * (1 - N/K) - H122123def competition(y, t, r1, K1, r2, K2, alpha12, alpha21):124N1, N2 = y125dN1 = r1 * N1 * (1 - (N1 + alpha12*N2)/K1)126dN2 = r2 * N2 * (1 - (N2 + alpha21*N1)/K2)127return [dN1, dN2]128129# Parameters130r = 0.5131K = 1000132N0 = 50133A = 100 # Allee threshold134135# Time arrays136t_short = np.linspace(0, 30, 500)137t_long = np.linspace(0, 50, 500)138139# Basic logistic140N_logistic = odeint(logistic, N0, t_long, args=(r, K))[:, 0]141142# Exponential comparison143N_exp = N0 * np.exp(r * t_long)144145# Different growth rates146r_values = [0.3, 0.5, 0.8, 1.0]147N_r_vary = {}148for r_val in r_values:149N_r_vary[r_val] = odeint(logistic, N0, t_long, args=(r_val, K))[:, 0]150151# Allee effect152N_allee_above = odeint(allee, 150, t_long, args=(r, K, A))[:, 0]153N_allee_below = odeint(allee, 80, t_long, args=(r, K, A))[:, 0]154N_allee_threshold = odeint(allee, A, t_long, args=(r, K, A))[:, 0]155156# Harvesting analysis157H_values = [0, 30, 60, 90, 120]158N_harvest = {}159for H in H_values:160N_harvest[H] = odeint(logistic_harvest, 800, t_long, args=(r, K, H))[:, 0]161162# MSY calculation163MSY = r * K / 4164N_MSY = K / 2165166# Competition outcomes167# Coexistence168N_coex = odeint(competition, [100, 100], t_long, args=(0.5, 1000, 0.5, 1000, 0.5, 0.5))169# Competitive exclusion170N_excl = odeint(competition, [100, 100], t_long, args=(0.5, 1000, 0.4, 800, 1.2, 1.5))171172# Growth rate vs population173N_range = np.linspace(0, K, 200)174dN_dt_logistic = r * N_range * (1 - N_range/K)175dN_dt_allee = r * N_range * (1 - N_range/K) * (N_range/A - 1)176177# Per capita growth rate178per_capita_logistic = r * (1 - N_range/K)179per_capita_allee = np.where(N_range > 0, r * (1 - N_range/K) * (N_range/A - 1), 0)180181# Create figure182fig = plt.figure(figsize=(14, 12))183184# Plot 1: Logistic vs exponential185ax1 = fig.add_subplot(3, 3, 1)186ax1.plot(t_long, N_logistic, 'b-', linewidth=2, label='Logistic')187ax1.plot(t_long, np.clip(N_exp, 0, 2500), 'r--', linewidth=2, label='Exponential')188ax1.axhline(y=K, color='gray', linestyle='--', alpha=0.7, label=f'K = {K}')189ax1.set_xlabel('Time')190ax1.set_ylabel('Population $N$')191ax1.set_title('Logistic vs Exponential Growth')192ax1.legend(fontsize=8)193ax1.set_ylim([0, 1500])194195# Plot 2: Growth rate vs population196ax2 = fig.add_subplot(3, 3, 2)197ax2.plot(N_range, dN_dt_logistic, 'b-', linewidth=2, label='Logistic')198ax2.plot(N_range, dN_dt_allee, 'r-', linewidth=2, label='Allee')199ax2.axvline(x=K/2, color='blue', linestyle=':', alpha=0.7)200ax2.axvline(x=A, color='red', linestyle=':', alpha=0.7)201ax2.axhline(y=0, color='black', linewidth=0.5)202ax2.set_xlabel('Population $N$')203ax2.set_ylabel('$dN/dt$')204ax2.set_title('Population Growth Rate')205ax2.legend(fontsize=8)206207# Plot 3: Effect of growth rate208ax3 = fig.add_subplot(3, 3, 3)209colors = plt.cm.viridis(np.linspace(0, 0.8, len(r_values)))210for i, r_val in enumerate(r_values):211ax3.plot(t_long, N_r_vary[r_val], color=colors[i], linewidth=2, label=f'r = {r_val}')212ax3.axhline(y=K, color='gray', linestyle='--', alpha=0.7)213ax3.set_xlabel('Time')214ax3.set_ylabel('Population $N$')215ax3.set_title('Effect of Growth Rate')216ax3.legend(fontsize=8)217218# Plot 4: Allee effect219ax4 = fig.add_subplot(3, 3, 4)220ax4.plot(t_long, N_allee_above, 'g-', linewidth=2, label=f'$N_0 = 150 > A$')221ax4.plot(t_long, N_allee_below, 'r-', linewidth=2, label=f'$N_0 = 80 < A$')222ax4.plot(t_long, N_allee_threshold, 'orange', linewidth=2, label=f'$N_0 = A$')223ax4.axhline(y=K, color='gray', linestyle='--', alpha=0.7)224ax4.axhline(y=A, color='black', linestyle=':', alpha=0.7)225ax4.set_xlabel('Time')226ax4.set_ylabel('Population $N$')227ax4.set_title(f'Allee Effect (A = {A})')228ax4.legend(fontsize=8)229ax4.set_ylim([0, 1200])230231# Plot 5: Harvesting232ax5 = fig.add_subplot(3, 3, 5)233colors_h = plt.cm.plasma(np.linspace(0, 0.8, len(H_values)))234for i, H in enumerate(H_values):235ax5.plot(t_long, N_harvest[H], color=colors_h[i], linewidth=2, label=f'H = {H}')236ax5.axhline(y=0, color='black', linewidth=0.5)237ax5.set_xlabel('Time')238ax5.set_ylabel('Population $N$')239ax5.set_title('Constant Harvest Rate')240ax5.legend(fontsize=8, loc='upper right')241ax5.set_ylim([0, 1000])242243# Plot 6: Yield curve244ax6 = fig.add_subplot(3, 3, 6)245N_eq = np.linspace(0, K, 200)246yield_curve = r * N_eq * (1 - N_eq/K)247ax6.plot(N_eq, yield_curve, 'b-', linewidth=2)248ax6.axvline(x=N_MSY, color='red', linestyle='--', alpha=0.7)249ax6.axhline(y=MSY, color='red', linestyle='--', alpha=0.7)250ax6.scatter([N_MSY], [MSY], s=100, c='red', zorder=5, label=f'MSY = {MSY:.0f}')251ax6.set_xlabel('Equilibrium population $N^*$')252ax6.set_ylabel('Sustainable yield')253ax6.set_title('Maximum Sustainable Yield')254ax6.legend(fontsize=8)255256# Plot 7: Competition - coexistence257ax7 = fig.add_subplot(3, 3, 7)258ax7.plot(t_long, N_coex[:, 0], 'b-', linewidth=2, label='Species 1')259ax7.plot(t_long, N_coex[:, 1], 'r-', linewidth=2, label='Species 2')260ax7.set_xlabel('Time')261ax7.set_ylabel('Population')262ax7.set_title('Competition: Coexistence')263ax7.legend(fontsize=8)264265# Plot 8: Competition - exclusion266ax8 = fig.add_subplot(3, 3, 8)267ax8.plot(t_long, N_excl[:, 0], 'b-', linewidth=2, label='Species 1')268ax8.plot(t_long, N_excl[:, 1], 'r-', linewidth=2, label='Species 2')269ax8.set_xlabel('Time')270ax8.set_ylabel('Population')271ax8.set_title('Competition: Exclusion')272ax8.legend(fontsize=8)273274# Plot 9: Per capita growth rate275ax9 = fig.add_subplot(3, 3, 9)276ax9.plot(N_range, per_capita_logistic, 'b-', linewidth=2, label='Logistic')277ax9.plot(N_range, per_capita_allee, 'r-', linewidth=2, label='Allee')278ax9.axhline(y=0, color='black', linewidth=0.5)279ax9.axvline(x=A, color='red', linestyle=':', alpha=0.7)280ax9.set_xlabel('Population $N$')281ax9.set_ylabel('Per capita growth rate')282ax9.set_title('Density Dependence')283ax9.legend(fontsize=8)284285plt.tight_layout()286plt.savefig('logistic_growth_analysis.pdf', dpi=150, bbox_inches='tight')287plt.close()288289# Calculate key values290t_inflection = np.log((K - N0) / N0) / r291doubling_time = np.log(2) / r292\end{pycode}293294\begin{figure}[htbp]295\centering296\includegraphics[width=\textwidth]{logistic_growth_analysis.pdf}297\caption{Logistic growth analysis: (a) Comparison with exponential growth; (b) Population298growth rate showing inflection points; (c) Effect of intrinsic growth rate; (d) Allee299effect dynamics; (e) Constant harvest scenarios; (f) Maximum sustainable yield curve;300(g-h) Competition outcomes; (i) Per capita growth rate showing density dependence.}301\label{fig:logistic}302\end{figure}303304\section{Results}305306\subsection{Model Parameters}307308\begin{pycode}309print(r"\begin{table}[htbp]")310print(r"\centering")311print(r"\caption{Logistic Growth Model Parameters and Key Values}")312print(r"\begin{tabular}{lcc}")313print(r"\toprule")314print(r"Parameter & Symbol & Value \\")315print(r"\midrule")316print(f"Intrinsic growth rate & $r$ & {r} \\\\")317print(f"Carrying capacity & $K$ & {K} \\\\")318print(f"Initial population & $N_0$ & {N0} \\\\")319print(f"Allee threshold & $A$ & {A} \\\\")320print(r"\midrule")321print(f"MSY population & $N_{{MSY}}$ & {N_MSY:.0f} \\\\")322print(f"Maximum sustainable yield & MSY & {MSY:.1f} \\\\")323print(f"Time to inflection & $t_{{infl}}$ & {t_inflection:.2f} \\\\")324print(f"Doubling time & $t_d$ & {doubling_time:.2f} \\\\")325print(r"\bottomrule")326print(r"\end{tabular}")327print(r"\label{tab:parameters}")328print(r"\end{table}")329\end{pycode}330331\subsection{Harvesting Outcomes}332333\begin{pycode}334print(r"\begin{table}[htbp]")335print(r"\centering")336print(r"\caption{Equilibrium Populations Under Different Harvest Rates}")337print(r"\begin{tabular}{ccc}")338print(r"\toprule")339print(r"Harvest rate $H$ & Equilibrium $N^*$ & Sustainable? \\")340print(r"\midrule")341342for H in H_values:343N_final = N_harvest[H][-1]344if N_final > 1:345sustainable = "Yes"346else:347sustainable = "No (collapse)"348print(f"{H} & {N_final:.0f} & {sustainable} \\\\")349350print(r"\bottomrule")351print(r"\end{tabular}")352print(r"\label{tab:harvest}")353print(r"\end{table}")354\end{pycode}355356\section{Discussion}357358\begin{example}[Maximum Sustainable Yield]359For fisheries management, the MSY occurs at $N = K/2$:360\begin{equation}361\text{MSY} = r \cdot \frac{K}{2} \cdot \left(1 - \frac{K/2}{K}\right) = \frac{rK}{4} = \py{f"{MSY:.1f}"}362\end{equation}363Harvesting at rates exceeding MSY leads to population collapse.364\end{example}365366\begin{remark}[Allee Effect and Conservation]367The Allee effect has critical implications for conservation:368\begin{itemize}369\item Small populations face extinction risk even without external threats370\item Minimum viable population size must exceed the Allee threshold371\item Reintroduction programs must establish populations above this threshold372\item Habitat fragmentation increases Allee effect risks373\end{itemize}374\end{remark}375376\begin{example}[Competition Outcomes]377The outcome of Lotka-Volterra competition depends on $\alpha$ values:378\begin{itemize}379\item Coexistence: $\alpha_{12} < K_1/K_2$ and $\alpha_{21} < K_2/K_1$380\item Species 1 wins: $\alpha_{12} < K_1/K_2$ and $\alpha_{21} > K_2/K_1$381\item Species 2 wins: $\alpha_{12} > K_1/K_2$ and $\alpha_{21} < K_2/K_1$382\item Unstable: Both inequalities reversed383\end{itemize}384\end{example}385386\section{Conclusions}387388This analysis demonstrates key aspects of logistic population dynamics:389\begin{enumerate}390\item The population approaches carrying capacity $K = \py{f"{K}"}$ with inflection at $K/2$391\item MSY of $\py{f"{MSY:.1f}"}$ occurs when harvesting maintains population at $K/2$392\item The Allee effect creates an extinction threshold at $A = \py{f"{A}"}$393\item Competition outcomes depend on relative competition coefficients394\item Per capita growth rate decreases linearly with population in the logistic model395\end{enumerate}396397\section*{Further Reading}398399\begin{itemize}400\item Gotelli, N.J. \textit{A Primer of Ecology}, 4th ed. Sinauer Associates, 2008.401\item Courchamp, F. et al. \textit{Allee Effects in Ecology and Conservation}. Oxford, 2008.402\item Clark, C.W. \textit{Mathematical Bioeconomics}, 3rd ed. Wiley-Interscience, 2010.403\end{itemize}404405\end{document}406407408