matlab中n维立方体的随机分布

时间:2015-08-18 04:25:46

标签: matlab

如何在边缘E的N维立方体表面生成随机均匀点?

有一个用于生成N维球体的代码,但我无法弄清楚如何为立方体生成它。

1 个答案:

答案 0 :(得分:0)

N维超立方体的优点在于它的面是尺寸(N-1)的超立方体。因此,我将分四步进行。

  • 在1..N范围内绘制一个名为d的随机整数,以选择超立方体面方向。 d=randi(N)
  • 要在两个可能的面中选择一个特定面,请绘制一个名为s的随机整数,该整数可以取两个值中的任何一个:0或1. s =randi(2)-1
  • 绘制一个随机均匀分布的矢量,称为长度为N的v,范围为0..1。 v=rand(N,1)
  • 将s替换为v中的第d个坐标,并将结果乘以边长E. v(d)=sv=E*v

在表面或边长2的3维立方体上绘制1000点我们会像:

N=3;  
E=2;
Nsamples=1000; 
d=randi(N,1,Nsamples);  
s =randi(2,1,Nsamples)-1;  
v=rand(N,Nsamples);  
for i=1:Nsamples  
  v(d(i),i)=s(i);  
end 
v = E*v;
plot3(v(1,:),v(2,:),v(3,:),'.');  

这种实现在纯效率方面可能不是最好的,但你了解它的工作原理。

希望这有帮助。

阿德里安。