List problems
- To: mathgroup at smc.vnet.net
- Subject: [mg29568] List problems
- From: Stuart Humphries <s.humphries at bio.gla.ac.uk>
- Date: Mon, 25 Jun 2001 20:42:23 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
I'm very new to Mathematica, but I've cobbled together some code for a
coupled map lattice model to look at population dynamics. My problem is
that although the code generates the results I'm interested in, it runs
incredibly slowly. I think I've narrowed the problem down to the way in
which I handle the arrays (lists) of population densities, but I'm stumped
as to how to code a faster implementation.
At present my code does the following:
Do[
(*Apply reproduction function to popn matrix, and remove dispersing
individuals*)
popn1 = Map[remain, Map[f, popn]];
(*generate array holding dispersing individuals*)
dispersers = Map[m, Map[f, popn]];
(*divide all dispersers by 4 to get single direction dispersers*)
dispersers = dispersers/4;
(*distribute dispersers*) z = Table[z, {z, 1, 9}];
y = Table[y, {y, 2, 10}];
popn1[[1, All]] = dispersers[[10, All]] + popn1[[1, All]];
(*add bottom row to top*)
popn1[[10, All]] = dispersers[[1, All]] + popn1[[10, All]];
(*add top row to bottom*)
popn1[[All, 1]] = dispersers[[All, 10]] + popn1[[All, 1]];
(*add right col to left*)
popn1[[All, 10]] = dispersers[[All, 1]] + popn1[[All, 10]];
(*add left col to right*)
popn1[[z, All]] = dispersers[[y, All]] + popn1[[z, All]];
(*add to next row up from last 3 rows*)
popn1[[y, All]] = dispersers[[z, All]] + popn1[[y, All]];
(*add to next row down from first 3 rows*)
popn1[[All, z]] = dispersers[[All, y]] + popn1[[All, z]];
(*add to next col left from right 3 cols*)
popn1[[All, y]] = dispersers[[All, z]] + popn1[[All, y]];
(*add to next col right from left 3 cols*) popn = popn1;
(*If generations is between range specified, add total population size to
ensemble array, and patch population size to patch array*)
If[g1 <= g <= g2, {AppendTo[ensemblesize, {Apply[Plus, Flatten[popn]]}],
AppendTo[patchsize, {popn[[5, 5]]}]}]; Unset[popn1]; Unset[dispersers];
, {g, gmax}];
which is repeated for about 1200 'generations' (gmax), and this itself form
part of a larger 100+ repetition.
I hope this makes sense to someone out there.
Any suggestions would be very welcome.
Thanks,
Stuart
Dr Stuart Humphries
FBA/NERC Research Fellow
Division of Environmental and Evolutionary Biology
Graham Kerr Building
University of Glasgow
Glasgow G12 8QQ
Tel: +44 (0)141 330 6621
Fax: +44 (0)141 330 5971
http://www.gla.ac.uk/Acad/IBLS/DEEB/sh