This post is intended in a similar direction to an earlier one Can I use Compile to speed up InverseCDF? . I now wish to generate uniform points in an $n$-simplex (specifically $n=8$), making use of the indicated "golden-ratio" generalization procedure of Martin Roberts for a low-discrepancy sequence of points in the hypercube $[0,1]^{n+1}$.

I take it that now instead of the command

P = InverseCDF[NormalDistribution[0, 1], T]

in the earlier post (where T is the (n+1)-vector of real numbers in the hypercube), I could replace NormalDistribution by GammaDistribution (and then normalize $P$ to sum to 1).

Then, what pair of parameters (one of them should be 1) should be employed in the argument of GammaDistribution?

Or is there a more appropriate/obvious approach to utilizing the Roberts methodology? (Might DirichletDistribution be employed?)

I see that there is a good deal of related discussion on this site Uniformly distributed n-dimensional probability vectors over a simplex


1 Answer 1


One approach to incorporating the Roberts methodology for generating sequences of low-discrepancy points in hypercubes in our effort to obtain points uniformly distributed over simplicies, is to adapt the code

samples[n_] := Differences[Join[{0}, Sort[RandomReal[Range[0, 1], n - 1]],{1}]]

put forth by Sophie Alpert in her answer in https://stackoverflow.com/questions/3010837/sample-uniformly-at-random-from-an-n-dimensional-unit-simplex

We would replace

RandomReal[Range[0, 1], n - 1]

by another (n-1)-length vector G, the $i$-th realization of which would be given by

p = x /. Solve[x^n == x + 1, x][[1]];Do[G[[j]] = Mod[1/2 + i/p^j,1], {j, 1, n-1}];

So, the Roberts procedure would be employed in our case at hand to generate 8-vectors, rather than 9-vectors, as we originally anticipated.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.