MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: More Inquiries

  • To: mathgroup at smc.vnet.net
  • Subject: [mg91297] Re: [mg91250] Re: [mg91163] More Inquiries
  • From: Darren Glosemeyer <darreng at wolfram.com>
  • Date: Thu, 14 Aug 2008 06:59:26 -0400 (EDT)
  • References: <200808111007.GAA11237@smc.vnet.net>

> RandomReal
>
> BurrDistribution /: RandomReal[
>    BurrDistribution[c_?NumericQ, k_?NumericQ]] :=
>   
>   InverseCDF[BurrDistribution[c, k], RandomReal[]];
>
> BurrDistribution /: RandomReal[
>    BurrDistribution[c_?NumericQ, k_?NumericQ], 
>    n_Integer?Positive] :=
>   
>
>
>
>   Table[InverseCDF[BurrDistribution[c, k], RandomReal[]], {n}];

Just wanted to add a note on efficiency of random number generation and 
on some available documentation and utilities that are relevant for 
anyone who is interested in this type of thing. When it is possible to 
get more than one RandomReal (or RandomInteger, RandomChoice) at a time, 
and/or use vector evaluation, this will typically be faster than direct 
one at a time evaluation. In this case, we could reduce to one 
RandomReal call and use vector evaluation (though most of the speed gain 
comes from the vector evaluation).

For the generator we could use the following:

In[1]:= randomBurr[c_?Positive, k_?Positive,
          n_Integer?Positive] := ((1 - RandomReal[1, n])^(-1/k) - 1)^(1/c)

In[2]:= Timing[randomBurr[1, 2, 10^6];]

Out[2]= {0.875, Null}


In comparison, here is the timing for the direct one at a time 
evaluation approach


In[3]:= BurrDistribution /:
          InverseCDF[BurrDistribution[c_, k_],
           q_] := ((1 - q)^(-1/k) - 1)^(1/c);

In[4]:= Timing[Table[
           InverseCDF[BurrDistribution[1, 2], RandomReal[]], {10^6}];]

Out[4]= {5.906, Null}


Also, there is a section in the Random Number Generation tutorial ( 
tutorial/RandomNumberGeneration in the Documentation Center or
http://reference.wolfram.com/mathematica/tutorial/RandomNumberGeneration.html 
online) titled "Defining Distributions" which discusses how additional 
distributional generators can be defined using some built-in utilities 
so that they work like RandomReal|RandomInteger[builtinDistribution,...].

Darren Glosemeyer
Wolfram Research


  • Prev by Date: Re: DO loop
  • Next by Date: Re: DO loop
  • Previous by thread: Re: More Inquiries
  • Next by thread: memory question