Re: Faster Random Walk Simulation ?!?
- To: mathgroup at smc.vnet.net
- Subject: [mg66219] Re: Faster Random Walk Simulation ?!?
- From: Mark Fisher <mark at markfisher.net>
- Date: Thu, 4 May 2006 05:21:02 -0400 (EDT)
- References: <e39k1n$cmn$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
mfific at gmail.com wrote:
> Dear All,
> I am running a simulation with Mathematica 5 that includes random walk
> described below. The argument boundaryA is upper and lower boundary for
> a random walk. Parameter "value" is just a constant arbitrarily set to
> 0.5. The output of the table function is the 10000 random walks, and
> their path to either +5 or -5 boundary value.
> While everything works as expected, it takes considerable duration of
> time. For example it takes 2.6 seconds to generate the table output, on
> a relatively fast computer.
>
> I would very appreciate if any significantly faster solution could be
> suggested.
>
>
> value = .5
>
>
> RandomWalk[boundaryA_] := Block[{l = {{0, 0}}, x = 0,
> i = 0 }, While[boundaryA > x > -boundaryA,
> x += If[Random[] > value, 1, -1];
> l = Append[l, {++i, x}]];
> l]
>
> Timing[Table[RandomWalk[5], {i, 1, 10000}];]
>
> Out[420]=
> {2.672 Second, Null}
>
>
> Thank you very much,
>
> Mario Fific
>
>
> Mario Fific
> Cognitive Psychology, Cognitive Science
> Indiana University
> 1101 E. 10th St.
> Bloomington, IN 47405-7007
>
Does this help?
cf = Compile[
{{value, _Real}, {bound, _Integer}},
Transpose[{Range[0, Length[#] - 1], #}]& @
NestWhileList[
# + If[Random[] > value, 1, -1]&,
0,
-bound < # < bound&]
]
--Mark.