how to produce a 2-D point distribution with normal density distribution

1 visualización (últimos 30 días)
Hi: I am trying to simulate a galaxy distribution, in which all units are identical, but the local densities are different. Simply speaking, I need to produce a 2-D point distribution, say, 1000 identical points in a 10*10 square, then if I measure the local densities (for example, within a circle with radius=1), I could get a normal distribution of densities.
Maybe I did not explain it clearly, but just do not know how to do it, I can easily generate a data set with normal distribution value, but how to apply normal distribution on the position of 2-D points (move some together and take some apart) to get normal density distribution? thanks!
  2 comentarios
Iman Ansari
Iman Ansari el 30 de Abr. de 2013
Editada: Iman Ansari el 30 de Abr. de 2013
See this: (mean zero and variance 1)
A=randn(1000,2);
x=A(:,1);
y=A(:,2);
plot(x,y,'Marker','.','LineStyle','none')
var(x)+1i*var(y)
mean(x)+1i*mean(y)
adameye adameye
adameye adameye el 1 de Mayo de 2013
thanks, this is very interesting, but this data looks like one "big ball", right? If I want to have a full pic of data, with points cluster somewhere, voids somewhere, how can I do it? Maybe I can combine some of those results to get a pic with a bunch of "big balls"? thanks again!

Iniciar sesión para comentar.

Respuestas (3)

Iman Ansari
Iman Ansari el 1 de Mayo de 2013
With adding a number in x and y directions you can change their position, and the number multiplied changes their radius:
A=randn(3000,2);
x=A(:,1)';
y=A(:,2)';
x=[x(1:800)+3 1/2.*x(801:1800)-3 1.5.*x(1801:3000)+2];
y=[y(1:800)+4 1/2.*y(801:1800) 1.5.*y(1801:3000)-3];
plot(x,y,'Marker','.','LineStyle','none')
axis('equal')
var(x)+1i*var(y)
mean(x)+1i*mean(y)
  1 comentario
Random user
Random user el 28 de Mzo. de 2017
Could you explain the code please? For example, if I want to make it more efficient, how would this be done in a loop? For example,
x=[x(1:800)+i-iterator 1/2.*x(801:1800)+i-iterator 1.5.*x(1801:3000)+i-iterator.....];
y=[y(1:800)+constant 1/2.*y(801:1800)+constant 1.5.*y(1801:3000)+constant.....];
If I wanted to use a loop, or any other vectorization method, how would this be done?

Iniciar sesión para comentar.


adameye adameye
adameye adameye el 1 de Mayo de 2013
Thanks a lot, This is a different way to solve the problem.
btw, do you know how to produce the needed distribution from power spectrum? because in cosmos people normaly make gaussian simulation a kind of stationary distributing (Cov(x,y)==Cov(x+u,y+u), only related with the distance between x and y, not relation with the shift u), in other words, the distribution will look like no obvious center....
thanks again

adameye adameye
adameye adameye el 14 de Mayo de 2013
Hi: Sorry I have to read some articles to investigate this problem and it took long time, I got http://www.astro.rug.nl/~weygaert/tim1publication/lss2007/computerIII.pdf I am still trying to understand the right procedure.... thank you very much! "
4 Generating Gaussian eld in Fourier Space Generating a Random Gaussian eld is easiliest done in Fourier space. Then the complex Fourier amplitudes are Y~ = Y~ exp(i*phi). Where is a random phase and the modules are Rayleigh distributed
f(x) =2x/(sigma^2)*exp(-x^2/sigma^2)
The dispersion is of course related to the Power Spectrum as
sigma^2=(delat_k^3)*P(k) "

Community Treasure Hunt

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

Start Hunting!

Translated by