Solving the Lotka-Volterra equations
This script solves the simple predator-prey equations using the built in Matlab functions. Please note that this script defines functions at the end, which is only supported by MATLAB 2016b or later. The Lotka-Volterra equations are:
Contents
close all; clear
Initialization
alpha = 2/3; beta = 4/3; delta = 1; gamma = 1;
We define the ICs.
prey0 = 1; pred0 = 2; N0 = [prey0 pred0];
Use ODE45
tic % To pass additional parameters to the DE function, use the anonymous % function @(t,N) so that the first parameter of ode45 "only" takes in two % parameters. [ts, Ns] = ode45(@(t,N) func_lotkavolterra(t,N,alpha,beta,delta,gamma),[0 1000],N0); toc figure(1) clf plot(ts,Ns) figure(2) clf plot(Ns(:,1),Ns(:,2),'-ob')
Zero population
Now consider if one of the populations is zero.
prey0 = 0;
pred0 = 2;
N0 = [prey0 pred0];
[ts, Ns] = ode45(@(t,N) func_lotkavolterra(t,N,alpha,beta,delta,gamma),[0 1000],N0);
toc
figure(1)
clf
plot(ts,Ns)
figure(2)
clf
plot(Ns(:,1),Ns(:,2),'-ob')
This system forms a limit cycle around the fixed point (gamma/delta,alpha/beta). There is also another fixed point at (0,0).
You can try varying the parameters or move to the intro_ODE_LV2 tutorial to consider a more complicated system.
The Lotka-Volterra equations
The simplest form of the L-V equations. Takes in time, the current populations, and the model parameters alpha, beta, delta and gamma. It returns the time derivative of the populations.
function dNdt = func_lotkavolterra(t, N,alpha,beta,delta,gamma)
The ODE equations
The first entry of the population numbers is the prey while the second is the predator. alpha*N(1) represents the natural exponential growth of the prey population while the beta*N(1)*N(2) term represents the rate of predation. The delta*N(1)*N(2) term is the growth of the predator population which is similar to the previous term but the constant may be different. The gamma*N(2) term is the natural decline of the predator population without a food source.
dNdt(1) = alpha*N(1)-beta*N(1)*N(2); dNdt(2) = delta*N(1)*N(2) - gamma*N(2); dNdt = dNdt(:);
end
Elapsed time is 247.362016 seconds.