function n = logerr(r,k,n0,noise,ifrel,nostep) %simulates logistic growth with stochastic component %r - intrinsic growth rate %k - carrying capacity %n0 - initial population size %ifrel: 0 - absolute noise (no of ind) % 1 - relative noise (proportion of number of individuals) % 2 - demographic stochasticity %nostep - number of steps for simulation n = [n0]; for t=1:nostep if ifrel == 1 nprime = n(t) + r*n(t)*(k-n(t))/k + randn*noise*n(t); elseif ifrel == 2 if n(t) == 0 nprime = n(t); else nprime = n(t) + poisr(r*n(t)*(k-n(t))/k,1); %nprime = poisr(n(t) + r*n(t)*(k-n(t))/k,1); end else nprime = n(t) + r*n(t)*(k-n(t))/k + randn*noise; end if nprime < 0 nprime = 0; end n =[n nprime]; end function y = poisr(lambda,n) %POISR Poisson random number generator. % POISR(LAMBDA,N) generates N random deviates from the % Poisson distribution with mean LAMBDA. % % POISR(LAMBDA) generates a single random deviate. % % See POISP, RAND. % GKS 31 July 1993, 28 July 1999 % Uses naive inversion method. if lambda == 0 for i = 1:n, y(i) = 0; end; return; end if nargin==1, n=1; end; low = max( 0 , floor( lambda - 8*sqrt(lambda) )); hi = ceil( lambda + 8*sqrt(lambda) + 4/lambda ); x = (low:hi)'; p = cumsum( exp( -lambda + x.*log(lambda) - gammaln(x+1) )); u = rand(n,1); y = zeros(n,1); for i = 1:n, k = find( u(i) < p ); y(i) = x( k(1) ); end;