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

Click For Summary

Discussion Overview

The discussion revolves around a Matlab code implementation for a Gillespie type reaction model involving wolves and elk. Participants share code snippets and express intentions to contribute additional resources for community use.

Discussion Character

  • Technical explanation
  • Experimental/applied

Main Points Raised

  • Post 1 presents a Matlab code example for simulating a reaction model that converts biomass of elk into new wolves using both ODE and Gillespie methods.
  • Participants express appreciation for the shared code and discuss the ease of copying it using formatting tools.
  • Post 3 indicates a participant's intention to upload additional Matlab files for community use, suggesting a collaborative spirit.

Areas of Agreement / Disagreement

There appears to be general agreement on the usefulness of the shared code, but no technical disagreements or alternative models are presented in the posts.

Contextual Notes

No specific limitations or unresolved issues are noted in the discussion.

Who May Find This Useful

Members of the community interested in Matlab coding, reaction modeling, or ecological simulations may find this discussion valuable.

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: 157
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