I am new to Matlab. I was reading this code snippet, but in some parts (marked with asterisks) I don’t understand what it means, so if anybody could help would be very much appreciated
function [A1nmb] = moran(initsize, popsize)
% MORAN generates a trajectory of a Moran type process
% which gives the number of genes of allelic type A1 in a population
% of haploid individuals that can exist in either type A1 or type A2.
% The population size is popsize and the initial number of type A1
% individuals os initsize.
% Inputs: initsize - initial number of A1 genes
% popsize - the total population size (preserved)
if (nargin==0)
initsize=10;
popsize=30;
end
A1nmb=zeros(1,popsize);
A1nmb(1)=initsize;
**lambda = inline('(x-1).*(1-(x-1)./N)', 'x', 'N');
mu = inline('(x-1).*(1-(x-1)./N)', 'x', 'N');**
x=initsize;
i=1;
while (x>1 & x<popsize+1)
if (lambda(x,popsize)/(lambda(x,popsize)+mu(x,popsize))>rand)
x=x+1;
A1nmb(i)=x;
else
x=x-1;
A1nmb(i)=x;
end;
i=i+1;
end;
nmbsteps=length(A1nmb);
***rate = lambda(A1nmb(1:nmbsteps-1),popsize) ...
+mu(A1nmb(1:nmbsteps-1),popsize);***
**jumptimes=cumsum(-log(rand(1,nmbsteps-1))./rate);**
jumptimes=[0 jumptimes];
stairs(jumptimes,A1nmb);
axis([0 jumptimes(nmbsteps) 0 popsize+1]);
The first line you marked
creates something called an inline function. It is equivalent to defining a mathematical function. Example:
would allow you to do
This immediately explains the second line you marked.
will compute the value of the function
lambda(x,N)atx = A1nmb(1:nmbsteps-1)andN = popsize.I will say immediately here that you should take a look at anonymous functions, a different format used to accomplish the same as
inline. Only, anonymous functions are generally better supported, and usually a lot faster thaninlinefunctions.Then, for the final line,
is a nested command.
randwill create a matrix containing pseudorandom numbers,logis the natural logarithm ("ln"), andcumsumcreates a new matrix, where all the elements in the new matrix are the cumulative sum of the elements in the input matrix.You will find the commands
docandhelpvery useful. Try typingor
on the Matlab command prompt. Try that again with the commands forming the previous statement.
As a general word of advice: spend an insane lot of time reading through the documentation. Really, for each new command you encounter, read about it and play with it in a sandbox until you feel you understand it. Matlab only becomes powerful if you know all its commands, and there are a lot to get to know.