Re: Random spherical troubles

• To: mathgroup at smc.vnet.net
• Subject: [mg25199] Re: Random spherical troubles
• From: dkeith at sarif.com
• Date: Tue, 12 Sep 2000 21:24:44 -0400 (EDT)
• References: <8pkl8u\$m80@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```
Hello Barbara,

Your problem is similar to others I have considered doing Monte Carlo
simulations. I think it can be understood best in two steps:

1) You want the probability of a point occuring in the region
dTheta*dPhi to be proportional to the actual Euclidean area on the
surface of the sphere represented by dTheta*dPhi. But that area is not
just that product. If you condsider how Euclidean area is swept out by
theta and phi, in just the same way you would use to integrate the
surface, you will see that dArea is given by r^2*Sin[theta]
*dTheta*dPhi. So the probability of finding a point in dTheta*dPhi is
proportional to r^2*Sin[theta].

2) The next problem is to create a transformation which takes a random
variable distribution we have into this one we want. There is a nice
theory in probability that says if p[x] is a distribution function and
f[x] is its cumulative distribution (integral), and the distribution p
is normalized, then Inverse[f][Random[0,1]] is a variable having p
distribution. (Random[0,1] is a random variable of uniform distibution
in (0,1).)

So to make use of this we take f[theta] to be A*Sin[theta] since we
need probability proportional to Sin[theta] and independent of phi. "A"
is for normalization. The cumulative distribution is gotten by
integrating and normalizing to get f[theta]=(1-Cos[theta])/2. The
transformation is then the inverse function theta=ArcCos[1-2*f].

So our new random variable can be generated as

{r, theta, phi}={r, ArcCos[1-2 Random[]],Random[Real,{0,2Pi}]}

or for example

polarPoints =
Table[{1, ArcCos[1 - 2Random[]], Random[Real, {0, 2Pi}]}, {1000}];

Regards,

David

In article <8pkl8u\$m80 at smc.vnet.net>,
Barbara DaVinci <barbara_79_f at yahoo.it> wrote:
>  Hi MathGrouppisti
>
>  This time, my problem is to generate a set of
> directions randomly
>  distributed over the whole solid angle.
>
>  This simple approach is incorrect (spherical
> coordinates are assumed) :
>
>  Table[{Pi Random[], 2 Pi Random[]} , {100}]
>
>  because this way we obtain a set of point uniformly
> distributed
>  over the [0 Pi] x [0 2Pi] rectangle NOT over a
> spherical surface :-(
>
>  If you try doing so and plot the points {1,
> random_theta , random_phi}
>  you will see them gathering around the poles because
> that simple
>  transformation from rectangle to sphere isn't
> "area-preserving" .
>
>  Such a set is involved in a simulation in statistical
>  mechanics ...
>  and I can't get out this trouble.
>
>  May be mapping [0 Pi] x [0 2Pi] in itself , using an
> suitable
>  "non-identity" transformation, can spread points in a
> way balancing
>  the poles clustering effect.
>
> ====================================================================
>
>  While I was brooding over that, an intuition flashed
> trought my mind :
>  since spherical to cartesian transformation is
>
>   x = rho Sin[ theta ] Cos[ phi ]
>   y = rho Sin[ theta ] Sin[ phi ]
>   z = rho Cos[ theta ]
>
>  perhaps the right quantities to randomly spread
> around are Cos[ theta ] and
>  Cos[ phi ] rather than theta and phi for itself. Give
> a glance at this :
>
>  Table[{
>  ArcCos[ Random[] ],
>  ArcCos[ Random[] Sign[ 0.5 - Random[] ]
>  } , {100}]
>
>  Do you think it is close to the right ? Do you see a
> better way ?
>  Have you just done the job in the past ? Should I
> reinvent the wheel ?
>
> ====================================================================
>
>  I thanks you all for prior replies and in advance
> this time.
>
>  Distinti Saluti
>  (read : "Faithfully yours")
>
>  Barbara Da Vinci
>  barbara_79_f at yahoo.it
>
> ______________________________________________________________________
> Do You Yahoo!?
> Il tuo indirizzo gratis e per sempre @yahoo.it su http://mail.yahoo.it
>
>

Sent via Deja.com http://www.deja.com/