MATLAB: I want to spatially distribute 1000 mobile devices in a network according to Poisson Point Process.

codedistributionmobilesNetworkpoissonpppprobabilityprogrammingrandom number generatorspatial distribution

I have 1000 mobile devices or Users. I want to spatially distribute them in a Network(Area detail given in next line) according to Poisson Point Process where the density rate or Lambda is 100. Network is a circular Area of Radius 1000m. poissrnd function only gives me a random variable. What can I do with it to spatially distribute them?. Please inform regarding it. I would be obliged.

Best Answer

If the simulation windown/region has 1000 (or non random n) points, then it is not a Poisson process. It is a binomial point process, which happens to be also a homogeneous Poisson point process conditioned on having n points.
You treat this problem in polar coordinates. For each point, you uniformly choose a random angular coordinate (or component) on the interval . For the radial coordinate (or component), you first choose a random number on the unit interval , and then you --- and this is very important -- square root that random number and multiply it by the radius of the disk. You have to take the square root to assure uniform points (because the area of a disk/sector is proportional to the radius squared, not the radius).
I recently answered this question in detail on my blog, where I discuss how to simulate a (homogeneous) Poisson point process on a disk. The code is here:
%Simulation window parameters
r=1; %radius of disk
xx0=0; yy0=0; %centre of disk
areaTotal=pi*r^2; %area of disk
%Point process parameters
lambda=1000; %intensity (ie mean density) of the Poisson process
%Simulate Poisson point process
numbPoints=poissrnd(areaTotal*lambda);%Poisson number of points
theta=2*pi*(rand(numbPoints,1)); %angular coordinates
rho=r*sqrt(rand(numbPoints,1)); %radial coordinates
%Convert from polar to Cartesian coordinates
[xx,yy]=pol2cart(theta,rho); %x/y coordinates of Poisson points
%Shift centre of disk to (xx0,yy0)
xx=xx+xx0;
yy=yy+yy0;
%Plotting
scatter(xx,yy);
xlabel('x');ylabel('y');
axis square;
Related Question