介绍
概念解释
首先我们要清楚的是泊松过程是一个 计数过程 。对于二维或者三维的PPP而言,随机抽样出来的样本点在范围内服从均匀分布,样本点之间的距离服从指数分布。这句话我并没有去深入理解研究,我看了中外多种资料后得到了个人对于同质泊松点过程的理解如下:
以上是特意针对与泊松点分布的公式,这里与一般的泊松过程有所不同(或许是相同的只是我不懂(ˉ▽ˉ;)… )。其中 λ \lambda λ就是给定的一个参数,可以称为密度, ∣ B ∣ |B| ∣B∣代表着一个数学区域,通俗来说就是给定的二维平面或者三维空间(高维可不用考虑了,没必要)。记 Λ = λ ∣ B ∣ \Lambda = \lambda |B| Λ=λ∣B∣,这一参数可以被称为速率或者强度。那么在区域 ∣ B ∣ |B| ∣B∣中的随机撒点个数 N ( B ) = n N(B) = n N(B)=n就服从了泊松分布。事实上,参数 Λ \Lambda Λ代表的是 E [ N ( B ) ] \mathbb{E} [N(B)] E[N(B)],也就是多次泊松点过程后在区域上产生随机点个数的均值。这一点可以在我结合的程序中通过Null的值来体现,可以发现多次仿真后它的值是在40附近波动的。
模拟方法
(这里的表述来自*,其思想似乎和CSDN都是一样的)对于一个泊松点过程,通常在一个边界区域中完成,我们大致需要两步:①创建随机点数②以适当的方式随机布点
创建随机点数
随机点数W的模拟通过随机数生成功能能够模拟泊松随机变量,这里程序对应着 %%% Part1 %%% 。具体方法来源于CSDN
这里 μ \mu μ等同于 Λ \Lambda Λ。
点的位置分布
对于常规的二维平面或者三维空间(可以理解为矩形或者立方体吧❓),每个坐标均匀的分布在区域 ∣ B ∣ |B| ∣B∣中,也就是通过均匀分布的方法。如果是非笛卡尔子空间(如球体或者球表面),则不会是均匀地放置并且需要适当的更改坐标(无详解)
程序
2D&3D PPP,参考链接
%%% Part1 %%%
Lambda = 20; % Lambda:poisson(Lambda)
u = unifrnd(0,1)
M = 0;
while u >= exp(-Lambda)%判定条件
u = u*unifrnd(0,1);
M=M+1;
end
%取点个数
R = poissrnd(Lambda,1,M)
%%% Part2 %%%
a = 0; c = 0;
b = 100; d =100;
e = 0; f = 100; %取[0,100]*[0,100]的布点区域;
Nall = M;
% A = [];
% B = [];
while M > 0 %scatter in the [0,100]*[0,100]
M = M-1;
u1 = unifrnd(0,1);
A(Nall-M) = (b-a)*u1;
u2 = unifrnd(0,1);
B(Nall-M) = (d-c)*u2;
u3 = unifrnd(0,1);
C(Nall-M) = (f-e)*u3;
figure(1) %base stations 分布图
plot3(A(Nall-M),B(Nall-M),C(Nall-M),'r^');
hold on;
plot(A(Nall-M),B(Nall-M),'b.')
hold on
end
grid on
泊松簇过程PCP,参考链接
%泊松簇过程仿真
%父过程
lambda = 10; % 密度
M = 0;
U = unifrnd(0,1);
while U >= exp(-lambda) %判定条件
U = U*unifrnd(0,1);
M=M+1;
end
if M < 1
M = 1;
end
L = 100;
a = 0;b = L; %取[0,100]*[0,100]*[0,100]的布点区域;
c = 0;d = L;
A = zeros(1,M);
B = zeros(1,M);
for i = 1:M
U1 = unifrnd(0,1);
A(i) = (b-a)*U1;
U2 = unifrnd(0,1);
B(i) = (d-c)*U2;
plot(A(i),B(i),'r^');
hold on;
end
grid on;
%子过程
for j=1:M
n = 50;
r = 8;
u1 = zeros(1,n);
u2 = zeros(1,n);
R = zeros(1,n);
x = zeros(1,n);
y = zeros(1,n);
theta = zeros(1,n);
for i = 1:n
u1(i) = unifrnd(0,1);
end
R = r * sqrt(u1);
R = sort(R);
for i = 1:n
u2(i) = unifrnd(0,1);
end
theta = 2*pi*u2;
for i = 1:n
x(i) = A(j) + R(i) * cos(theta(i));
y(i) = B(j) + R(i) * sin(theta(i));
end
plot(x,y,'.b');
end
axis([-10,110,-10,110]);
自己结合的二维泊松点过程后再画Voronoi图的程序(可实现Delaunay三角划分)
%%自己综合的程序,维诺泊松图
%%% Part1 %%%
Lambda = 40; % Lambda:poisson(Lambda)
u = unifrnd(0,1);
M = 0;
while u >= exp(-Lambda)%判定条件
u = u*unifrnd(0,1);
M=M+1;
end
%%% Part2 %%%
a = 0; c = 0;
b = 100; d =100; %取[0,100]*[0,100]的布点区域;
Nall = M;
% A = [];
% B = [];
while M > 0 %scatter in the [0,100]*[0,100]
M = M-1;
u1 = unifrnd(0,1);
A(Nall-M) = (b-a)*u1;
u2 = unifrnd(0,1);
B(Nall-M) = (d-c)*u2;
plot(A(Nall-M),B(Nall-M),'r^')
hold on
end
%%画出voronoi图
voronoi(A',B','--');
%%画出delaunay三角剖分图
%%C=[A' B'];
%%DT=delaunayTriangulation(C);
%%triplot(DT,'r')