Matlab code for a Gillespie type reaction (model) with wolves and elk.

Click For Summary
SUMMARY

This discussion focuses on implementing a Gillespie-type reaction model in MATLAB to simulate the interaction between wolves and elk. The provided code includes both a basic Ordinary Differential Equation (ODE) simulation and a Gillespie algorithm for stochastic modeling. Key parameters include birth and death rates for both species, with specific values such as b1 = 0.033 and a1 = 0.0022. The discussion also highlights the importance of visualizing results through plots generated by MATLAB.

PREREQUISITES
  • Familiarity with MATLAB programming (version unspecified)
  • Understanding of Ordinary Differential Equations (ODEs)
  • Knowledge of stochastic processes and the Gillespie algorithm
  • Basic concepts of ecological modeling, specifically predator-prey dynamics
NEXT STEPS
  • Explore advanced MATLAB plotting techniques for better data visualization
  • Learn about parameter sensitivity analysis in ecological models
  • Investigate extensions of the Gillespie algorithm for multi-species interactions
  • Study the implementation of agent-based modeling in MATLAB for ecological simulations
USEFUL FOR

Ecologists, computational biologists, and MATLAB users interested in modeling predator-prey dynamics and stochastic processes in ecological systems.

DrWahoo
Messages
45
Reaction score
0
Copy and paste if you want to use any of this code. Its a simple iteration of converting biomass of elk into new wolves.

Code:
% example for ODE and Gillespie

% one reversible reaction
 b1 = .033;
bo = .00047;
a1 = .0022;
ao = .00055;

Aini = 5168;
Bini = 34;

%% Basic ODE simulation
dt = 0.01;
Tmax = 1;

TV = (0:dt:Tmax)';
NT = length(TV);

ABVals = zeros(size(TV,1),2);

A=Aini;
B=Bini;
ABVals(1,:) = [A, B];

% loop over times
for it=2:NT
    dAdt = - b1*A*B + bo*A;
    dBdt = a1*B*A -ao*B 
    A = A + dAdt * dt;
    B = B + dBdt* dt;
    
    ABVals(it,:) = [A, B];
    
    
end

figure(1)
clf;
plot(TV,ABVals);
xlabel 'T';
legend('A','B');
hold on

return;
%% Gillespie

% loop goes over time steps

%Tmax = 1;
MaxSteps = 1000;

% define a large array to record everything
ABRecord = zeros(MaxSteps,2);
TRecord = zeros(MaxSteps,1);ABCount = [Aini,Bini];

t=0;TRecord(1) = t;
ABRecord(1,:) = ABCount;
istep=2;
while (t<= Tmax  && istep<=MaxSteps),
    
    A=ABCount(1);
    B=ABCount(2);
    
    % propensities ('gamma')
    PropElkEaten = b1 * A*B;
    PropWolvesBorn = a1*A*B;
    PropWolvesDie = ao*B;
    PropElkBorn = bo*A;
    
    % distribution of next reaction times follows exp( - gamma * t)
    NextFwdTime = exprnd(1/PropElkEaten,1);
    NextRevTime = exprnd(1/PropWolvesBorn,1);
    NextWolvesDie = exprnd(1/PropWolvesDie,1);
    NextElkBorn = exprnd(1/PropElkBorn,1);
    
    if NextFwdTime < NextRevTime,
        % forward reaction (A->B) happens
        t = t + NextFwdTime;
        ABCount = ABCount + [-1,1];
    else
        % reverse reaction (A->B) happens
        t = t + NextRevTime;
        ABCount = ABCount + [1,-1];
    end
    
    % record
    ABRecord(istep,:) = ABCount;
    TRecord(istep) = t;
    
    % done with this step, increment the step count
    istep=istep+1;
    
end

if istep-1<MaxSteps,
    TRecord = TRecord(1:istep-1);
    ABRecord = ABRecord(1:istep-1,:);
end

figure(1)
stairs(TRecord,ABRecord)
legend('A - ODE','B - ODE','A - Gillespie','B - Gillespie');
View attachment 7493
 

Attachments

  • MHB.png
    MHB.png
    3 KB · Views: 153
Physics news on Phys.org
I've enclosed your code in our [CODE][/CODE] tags to preserve the white space, and to make it easier for people to select and copy the entire block by double-clicking it.
 
MarkFL said:
I've enclosed your code in our [CODE][/CODE] tags to preserve the white space, and to make it easier for people to select and copy the entire block by double-clicking it.

Thanks Mark!

I have several hundred simple mfile's I plan to upload for people to use.
 
DrWahoo said:
Thanks Mark!

I have several hundred simple mfile's I plan to upload for people to use.

That's awesome! That's definitely music to my ears! (Yes)
 

Similar threads

  • · Replies 6 ·
Replies
6
Views
2K