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