圆内均匀分布 matlab,利用matlab中rand函数生成圆和球中均匀分布的数据点

一. rand 函数

rand函数是生成(0,1)之间均匀分布的数据点。

rand(m,n): 生成m行n列的在(0,1)之间的数据点,这些数据服从均匀分布。

例如生成1x2的服从(0,1)之间均匀分布的数据点:

>> rand(1,2)

ans =

0.8147 0.9058

二. 生成半径为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

820e8f5688cadb226331d415c31f1e22.png

三. 生成半径为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;

438d306be653035434fd773354a9a79c.png

四. 注意事项

1. 在圆中生成均匀分布的随机数据点的时候,半径需要开平方,而不能直接rand生成随机半径值。这是因为均匀分布在这种情形下是针对圆的面积而言,在极坐标下,面积元是374d9c1efd3f741218082a1cbd90cfd4.png,通过积分

3f949c3a0f7c67e44fada7e95b30fe45.png不变。面积元是均匀分布的,从而

3f949c3a0f7c67e44fada7e95b30fe45.png服从均匀分布,并不是

3e774a4b1990840f1dfb2593691947bb.png不服从均匀分布,故开平方。而角度

3484c1527177ac74ef92d123ac538fe3.png仍服从

1361dea35283ca3b214307f7ddf4fc8c.png均匀分布,不用开平方。

2. 在球中生成均匀分布随机数据点,半径需要开3次方,angle2用到反余弦。这是由于均匀分布此时指的是体积,即在球中任取一点的概率都相等。在球坐标下,球的体积元是

a2b94163ce37f1fb5f5b9b8a35788557.png,通过重积分得体积,

3f949c3a0f7c67e44fada7e95b30fe45.png变成

2ba75d1a27f887f98a425b04bbc95ac3.png服从均匀分布,故开三次方,

68b05d5c08855b2f94ca5cc0f48b75c8.png变成

668c17052aabc79c1a316891acdaea08.png,所以

668c17052aabc79c1a316891acdaea08.png服从均匀分布,生成rand(-1,1)再反余弦即可的

3484c1527177ac74ef92d123ac538fe3.png

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值