4

I have a point $p$ on the surface of a unit sphere. I want to sample points from the surface of the sphere, such that the probability density of a point $q$ on the surface is given by \begin{equation} f(q) \propto \exp(p^T q) \end{equation}

For simplicity, we can think of $p = (1,0,0,0,...)$. Is it possible to do it analytically? Can someone suggest how to do it?

kjetil b halvorsen
  • 63,378
  • 26
  • 142
  • 467
user2808118
  • 523
  • 2
  • 10

1 Answers1

3

On the unit sphere $S^{n-1}=\{x\in \mathbb{R}^n \colon x^T x=1\}$, $q^T p$ varies only between $-1$ and 1, so the densitiy $f$ does not vary too much. So it would be simple to implement rejection sampling. Then we must start with samling a point uniformly on the sphere, that is easy. Just draw $X$ from a spherical multivariate normal distribution (that is with mean zero and unit covariance matrix), and scale to norm 1. See How to generate uniformly distributed points on the surface of the 3-d unit sphere?

Then the rejection phase: Rescale the density $f$ so that its maximum value is 1, that is: $$ f(q)= \exp(p^T q-1) $$ and use that for the rejection phase, resulting in the algorithm:

  1. Draw $X \sim \mathcal{N}_n(0,I)$.

  2. Draw $P \sim \mathcal{U}(0,1)$.

  3. Accept $X$ if $P \le \exp(p^T X-1)$ else reject.

This is simple and maybe fast enough? If not fast enough, tell us.

Ben
  • 91,027
  • 3
  • 150
  • 376
kjetil b halvorsen
  • 63,378
  • 26
  • 142
  • 467
  • Thanks. I did something similar since I need to compute the expectation of a gradient only: 1) Sample n points $x_1, ..., x_n$ from standard normal. 2) Project on the sphere. Let them be $q_1,...q_n$. 3) Compute $\exp(p^T q)$ for these points and normalise to get a total probability of $1$. 4) Use these normalised probabilities to compute the expectation – user2808118 Feb 06 '19 at 05:32