概述
我经常看到错误,建议用一个给定的和生成随机数,一个只是使用一个统一的随机集,只是缩放它们。但是,如果你这样做,结果是真的均匀随机吗?
尝试这个简单的测试在二维。生成一个巨大的随机样本,然后缩放它们总和为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)的线。为了使点均匀,沿着该线的任何点必须同样可能。
当我使用缩放解决方案时,显然均匀性失败。该行上的任何点不是同样可能的。我们可以看到在3维中发生的同样的事情。看到这里的3-d图中,三角形区域中心的点更密集地包装。这是不均匀性的反映。
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
同样,简单的缩放解决方案失败。它不会在感兴趣的领域产生真正统一的结果。
我们能做得更好吗?嗯,是。 2-d中的简单解是生成指定沿着连接点(0,1)和1,0的线的距离的单个随机数。
t = rand(10000000,1);
xy = t*[0 1] + (1-t)*[1 0];
hist(xy(:,1),100)
可以示出,在单位平方中,由等式x y = 1限定的线上的任何点现在同样可能已被选择。这通过好的,平直的直方图来反映。
David Schwartz建议的排序方法是否在n维中工作?显然,它在2-d中这样做,下图表明它在3维中这样做。没有深入的思考,我相信它将工作在这个基本的情况下,在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)
还可以从文件交换,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
最后
以上就是专一蓝天为你收集整理的matlab 加随机数,添加到100的随机数:Matlab的全部内容,希望文章能够帮你解决matlab 加随机数,添加到100的随机数:Matlab所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复