Generate random sample of points distributed on the n-dimensional sphere of radius R and centred at the origin

조회 수: 31 (최근 30일)
How to generate random sample of points distributed on the n-dimensional sphere of radius R and centred at the origin?

채택된 답변

John D'Errico
John D'Errico 2019년 1월 10일
편집: John D'Errico 2019년 1월 10일
What is a "complex random n-dimensional vector"? Does this imply you want to see complex numbers? If so, then what does that mean?
Does the word complex only means too complicated for you to solve?
What do you mean by a normal distribution inside a bounded region? Sorry, but that has no meaning, since a normal distribution is unbounded. Did you intend to say a uniform distribution over that volume? That is easy.
Just generate a random and uniformly distributed point on the surface of the n-sphere. Then generate a random number (carefully, with the proper distribution) from the interval [0,1]. Combine the two variables, properly.
Npoints = 10000;
Ndim = 2; % points in a circle. ergo, easy to plot.
X = randn(Npoints,Ndim); % A normal dist is symmetrical
X = X./sqrt(sum(X.^2,2)); % project to the surface of the Ndim-sphere
% That last line requires MATLAB R2016b or later. Earlier versions will use bsxfun or even repmat.
% radial scale factor
R = nthroot(rand(Npoints,1),Ndim);
% Combine
X = X.*R;
% and plot
plot(X(:,1),X(:,2),'.')
Or, is your question to generate a truncated normal distribution inside the unit n-Sphere?
Simplest in that case is to just use rejection sampling. Generate the samples, then throw away any that fall outside of the N-sphere. That means you need to over-sample.
X = randn(Npoints,Ndim);
X(sqrt(sum(X.^2,2)) > 1,:) = [];
plot(X(:,1),X(:,2),'.')
size(X)
ans =
3971 2
This is actually more densely populated mear the center of the unit circle. The difference is not immense though. Note that we lost about 65% of the points in the rejection step. In higher dimensions, we would need to over-sample more heavily, so in a seriously high number of dimensions, rejection would be a problem. But I'm not going to answer a question that has not actually been said to be your real problem. If that is the case, you need to tell me you really want to do a truncated Normal in a high number of dimensions. What is high?
Hint: If you really want to do the truncated Normal inside a unit sphere, then you could simply use the same scheme that I did for the uniform case, but the radial computation would use a truncated chi distribution to get R. (As distinct from a chi-square distribution.)
  댓글 수: 7
John D'Errico
John D'Errico 2020년 6월 6일
Exactly so. Just use plot3 or scatter3. There is nothing you can plot beyond 3 dimensions of course.
HyoSeung Kang
HyoSeung Kang 2023년 7월 24일
편집: HyoSeung Kang 2023년 7월 24일
Could you teach me mathematically how the first code generates a uniform distribution inside a ball?
Also, what is the analytic formula for this distribution's standard deviation?
This is what I am looking for, but I can not understand how it works.
Thanks a lot.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by