Re: Faster Random Walk Simulation ?!?
- To: mathgroup at smc.vnet.net
- Subject: [mg66275] Re: Faster Random Walk Simulation ?!?
- From: Mark Fisher <mark at markfisher.net>
- Date: Sat, 6 May 2006 23:50:37 -0400 (EDT)
- References: <e39k1n$cmn$1@smc.vnet.net><e3cism$a5i$1@smc.vnet.net> <e3f5gl$s84$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
mfific at gmail.com wrote: > Hi Mark, > > This is the winner!!! Timing is now .45 sec. I tried to use Compile > function before but without sucess. Could you help me (and potential > readers) with short explanation of your coude. > > thank you > > Mario > Sure. To repeat, cf = Compile[ {{value, _Real}, {bound, _Integer}}, Transpose[{Range[0, Length[#] - 1], #}]& @ NestWhileList[ # + If[Random[] > value, 1, -1]&, 0, -bound < # < bound&] ] The main part is the NestWhileList, which takes 3 arguments, the function to be nested (an anonymous function which assumes value has be given) (# + If[Random[] > value, 1, -1])& the starting value 0 and the "while" condition (an anonymous function that returns True or False as long as bound is a number) (-bound < # < bound)& The list of integers returned by NestWhileList is passed to the function that creates the index numbers Transpose[{#, Range[0, Length[#] - 1]}]& Each of these parts works by itself outside of Compile. Try them out and see what they do. For example try Transpose[{#, Range[0, Length[#] - 1]}]& @ {a, b, c} and With[{bound = 5}, (-bound < # < bound)& @ 4] and With[{value = .5}, (# + If[Random[] > value, 1, -1])& @ 0] Have I helped or just added more mystery? --Mark