Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2007
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2007

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

Search the Archive

Re: how to get random numbers from a distribution

  • To: mathgroup at smc.vnet.net
  • Subject: [mg81512] Re: how to get random numbers from a distribution
  • From: Roman <rschmied at gmail.com>
  • Date: Wed, 26 Sep 2007 06:43:31 -0400 (EDT)
  • References: <fd7s2q$cfd$1@smc.vnet.net>

For a simple distribution like x^2 (assuming on an interval [0,1]) you
can go by integration. First, define the distribution and the
definition interval:

d[x_] = x^2;
a = {0,1};

Then, find the normalized cumulative integral of the distribution
function:

i[y_] = Integrate[d[x],{x,a[[1]],y}]/Integrate[d[x],
{x,a[[1]],a[[2]]}];

We know that i[a[[1]] = 0 and i[a[[2]]]=1 by definition. You just need
to invert this function now:

FullSimplify[Solve[i[y]==p,y],0<p<1]

This gives three solutions, only one of which is real-valued: p^(1/3).
You define a new function by picking the correct solution:

g[p_] = p^(1/3);

>From this you can now produce random numbers distributed as d[x] by
transforming the uniform numbers produced by RandomReal on the
interval [0,1]. For example, to produce ten random numbers in the
interval defined by "a" and distributed like d[x], you do

g/@RandomReal[{0,1},10]

Obviously this is limited to analytically integrable *and* invertible
distributions d[x]. Also, the resulting algorithm may be far from
optimal (speed-wise), as the example d[x]=e^(-x^2) with a={-
Infinity,Infinity} shows: it gives g[x]=InverseErf[2p-1], which is a
slow special function, whereas there are well-known alternative
algorithms for producing fast Gaussian random numbers.

Roman.

On Sep 24, 10:21 am, tdoxm... at gmail.com wrote:
> Hi ya alll
>
> I am a new Mathematica user.
> I have a function that i use to generate a probability distribution
> (eg x^2). I want a random number generator, that should generate
> values from this probability distribution only,
>
> I know this Random function in mathematica, that can generate in
> particular range, but how do i tell to generate from a particular
> distribution.
>
> I created a list of values using my probability function but not able
> to integrate it with Random function so that random numnber takes
> value from that  list.
>
> Also I googled and saw some function like RandomChoice and some other
> but they are available in Mathematica6 and i use 5.2.
>
> Can u help with this.
>
> Thanks in advace




  • Prev by Date: Re: how to get random numbers from a distribution
  • Next by Date: Re: RE: Re: Mathematica 6.0 -
  • Previous by thread: Re: how to get random numbers from a distribution
  • Next by thread: Re: how to get random numbers from a distribution