matlab 加随机数,随机数加上100:Matlab

我经常看到这个错误,建议用一个给定的和来产生随机数,只是使用一个统一的随机集合,然后对它们进行缩放。 但是如果你这样做的话,真的是一致的随机结果吗?

尝试在两个维度这个简单的测试。 生成一个巨大的随机样本,然后将它们缩放到总和为1.我将使用bsxfun来进行缩放。

xy = rand(10000000,2); xy = bsxfun(@times,xy,1./sum(xy,2)); hist(xy(:,1),100)

如果它们是真正一致的随机数,那么x坐标将是一致的,y坐标也是一样的。 任何价值都可能发生。 实际上,对于总计为1的两点,它们必须位于连接(x,y)平面中两点(0,1),(1,0)的线上。 为了统一点,沿着这条线的任何点必须是相同的可能性。

158f6981ba65bffb6da6f61e3173ab68.png

当我使用缩放解决方案时,显然一致性失败。 这条线上的任何一点都不可能。 我们可以看到同样的事情发生在三维。 在三维图中可以看到,三角形区域中心的点更密集。 这是不一致的反映。

xyz = rand(10000,3); xyz = bsxfun(@times,xyz,1./sum(xyz,2)); plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.') view(70,35) box on grid on

2abdd1b286307444bfb6d810435c562f.png

再次,简单的缩放解决方案失败。 它不会在感兴趣的领域产生真正一致的结果。

我们可以做得更好吗? 嗯,是。 二维简单的解决方案是生成一个单一的随机数,指定沿着连接点(0,1)和1,0)的直线距离。

t = rand(10000000,1); xy = t*[0 1] + (1-t)*[1 0]; hist(xy(:,1),100)

ed666e0da0a60ca01b27d9b3d75efaae.png

可以看出,单位平方的方程x + y = 1所定义的直线上的任何一点现在都可能被选择。 这反映了漂亮,平坦的直方图。

大卫·施瓦茨(David Schwartz)在n维方面提出的排序技巧? 很显然,它在二维情况下是如此,下图表明它在三维情况下是如此。 如果没有深思熟虑的话,我相信它将在这个有n个层面的基本案例中起作用。

n = 10000; uv = [zeros(n,1),sort(rand(n,2),2),ones(n,1)]; xyz = diff(uv,[],2); plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.') box on grid on view(70,35)

b725bcf800ef53bffd84fa1fd6c01a0e.png

也可以从文件交换器Roger Stafford的贡献中下载函数randfixedsum 。 这是一个更一般的解决方案,在单位超立方体中生成真正一致的随机集,并给定固定和。 因此,为了产生位于单位3立方体中的随机点集合,根据约束它们总和为1.25 …

xyz = randfixedsum(3,10000,1.25,0,1)'; plot3(xyz(:,1),xyz(:,2),xyz(:,3),'.') view(70,35) box on grid on

081b037f7bd0748e79dc439046764a8b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值