Re: Random Normal deviates within compiled function?
- To: mathgroup at smc.vnet.net
- Subject: [mg62598] Re: Random Normal deviates within compiled function?
- From: Lee Newman <leenewm at umich.edu>
- Date: Tue, 29 Nov 2005 04:44:52 -0500 (EST)
- References: <dln17e$gf4$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
I use the following two functions. The first generates a single value from a normal distribution with mean and stdev specified in the arguments. It avoids the use of Mathematica's built in distribution functions. It will generate 10^6 values (using Table or Do) with timing of about 4 seconds on my machine (2.8GHz P4 with 1GB RAM). The second function is really fast. It uses the built-in NormalDistribution function, and for some reason using RandomArray makes it quite fast. It generates an array of 10^6 values in about 0.5seconds on my machine. GaussianNoise = Compile[{{mean, _Real}, {stdev, _Real}}, Module[{r = 0.0, x = 0.0, y = 0.0}, While[r == 0.0 || r > 1, x = Random[Real, {-1, 1}]; y = Random[Real, {-1, 1}]; r = x*x + y*y; ]; (x*Sqrt[-2Log[r]/r])*stdev + mean ] ]; GaussianArray = RandomArray[NormalDistribution[#1, #2], #3] &; (* the first argument is mean, second is the stdev and the third specifies the length of the array. *) Cheers, Lee Newman Gareth Russell wrote: > Hi All, > > I have a function which needs to be quick as it's used in simulations, > and it requires the internal generation of a large vector of random > normal deviates (up to 50,000). It appears that a function like > Random[NormalDistribution[0,s]] cannot be compiled. Can anyone suggest > an algorithm for getting such numbers that would work within a Compile > statement and still be quicker than using the non-compiled function? > > The non-compiled function would look as follows: > > f[v_,r_,k_,s_,q_]:=Select[v*Exp[r*(1 - v/k) + > RandomArray[NormalDistribution[0, s], > Length[v]]], # > q &] > > where v is a vector of 50,000 reals, and r, k, s and q are scalar reals. > > (If anyone is interested, this is for population projection in > population viability analysis.) > > Thanks, > > Gareth Russell > NJIT > -- - Lee ____________________________________________________ L E E N E W M A N www.leenewman.org d o c t o r a l s t u d e n t c o g n i t i v e p s y c h o l o g y c o m p u t e r s c i e n c e u . m i c h i g a n a n n a r b o r ____________________________________________________ Skylarks singing- the farmer makes a pillow of his hoe. ISSA