Skip to main content
1 of 3
Mark L. Stone
  • 13.5k
  • 1
  • 38
  • 58

The most straightforward way, which is a very general technique, is to use Acceptance-Rejection https://en.wikipedia.org/wiki/Rejection_sampling . It will be fairly fast as long as Prob(||X|| >= a) is fairly high, because then there will not be many rejections.

Generate a sample value x from the unconstrained Multivariate Normal (even though your problem states that the Multivariate Normal is spherical, the techniques can be applied even if it's not). If ||x|| >= a, accept, i.e., use x, otherwise reject it and generate a new sample. Repeat this process until you have as many samples as you need. The effect of applying this procedure is to generate y such that its density is c * f_X(y), if ||y||≥ a, per the opening portion of your question.

Mark L. Stone
  • 13.5k
  • 1
  • 38
  • 58