利用matlab中rand函数生成圆和球中均匀分布的数据点
一. rand 函数
rand函数是生成(0,1)之间均匀分布的数据点。
rand(m,n): 生成m行n列的在(0,1)之间的数据点,这些数据服从均匀分布。
例如生成1x2的服从(0,1)之间均匀分布的数据点:
>> rand(1,2)
ans =
    0.8147    0.9058matlab生成随机数
二. 生成半径为r的圆内均匀分布的数据点
%生成圆中均匀分布的随机数据点
angle=rand(1,1000)*2*pi; %(0,2*pi)之间均匀分布数据点
r=sqrt(rand(1,1000));%(0,1)之间r^2均匀分布数据点
x=r.*cos(angle);
y=r.*sin(angle);
figure
plot(x,y,'r.');
axis square
三. 生成半径为r的球内均匀分布数据点
%生成球中均匀分布的随机数据点
angle1=rand(1,1000)*2*pi;
angle2=acos(rand(1,1000)*2-1);;
r=power(rand(1,1000),1/3);
x=r.*cos(angle1).*sin(angle2);
y=r.*sin(angle1).*sin(angle2);
z=r.*cos(angle2);
figure
plot3(x,y,z,'r.');
axis square;
四. 注意事项
1. 在圆中生成均匀分布的随机数据点的时候,半径需要开平方,而不能直接rand生成随机半径值。这是因为均匀分布在这种情形下是针对圆的面积而言,在极坐标下,面积元是,通过积分不变。面积元是均匀分布的,从而服从均匀分布,并不是不服从均匀分布,故开平方。而角度仍服从均匀分布,不用开平方。
2. 在球中生成均匀分布随机数据点,半径需要开3次方,angle2用到反余弦。这是由于均匀分布此时指的是体积,即在球中任取一点的概率都相等。在球坐标下,球的体积元是,通过重积分得体积,变成服从均匀分布,故开三次方,变成,所以服从均匀分布,生成rand(-1,1)再反余弦即可的。