随机数生成开/闭区间

17日视图(30天)
Sakshi
Sakshi 2011年8月6日
评论道: 1月 2018年3月21日
兰德生成随机数函数使用开区间(0,1)。我怎么能生成随机值等部分关闭或全部闭区间(0,1]或[0,1]或[0,1)。

答案(3)

1月
1月 2011年8月7日
编辑:1月 2018年3月21日
大多数RNG创建的32块随机位。他们转换为0 < = x < 1双打,例如:
= bitshift (randi ([0, 2 ^ 32-1]), 5);
b = bitshift (randi ([0, 2 ^ 32-1]), 6);
d = 9007199254740992.0 (* 67108864.0 + b) /
0 < = x < = 1:
d = 9007199254740991.0 (* 67108864.0 + b) /
0 < x < = 1:
d = (1 + 67108864.0 * + b) / 9007199254740992.0
一个简单的拒绝机制是正确的:创建0 < = x < = 1和拒绝0和/或1保存正态分布。
另一个经常使用的方法:
=兰迪([0,2 ^ 32-1]);
b = bitshift (randi ([0, 2 ^ 32-1]), -11);
d = (2097152.0 * a + b) / 9007199254740992.0;
这是慢如果实现C与无符号整数,因为UINT32 - >双是在软件中实现,而INT32 - >双处理器命令。
5个评论
1月
1月 2018年3月21日
我固定的错误的输入 兰迪 现在。

登录置评。


奥列格•科马罗夫
奥列格•科马罗夫 2011年8月6日
兰德 闭区间上的生成 […]
在我看来是什么:
  • 生成在(…)
兰特()* (1 - 2 * eps) +每股收益
  • 生成在(…)
兰特()* (1-eps) +每股收益
  • 生成在(…)
兰特()* (1-eps)
编辑
这个例子似乎wronlgy指示闭区间和一些测试确认,实际上是(0,1):
nnz(兰德(1 e8, 1) = = 0)
nnz(兰德(1 e8, 1) = = 1)
不匹配。
6个评论
沃尔特·罗伯森
沃尔特·罗伯森 2011年8月8日
在一些以前版本记录,一些发电机的范围是[2 ^(-53),1 - 2 ^(-53)),而不是记录(0,1)。这是在2008年的一个文档的例子。
彼得,你刚才说的,默认的捻线机算法不是(0,1)。
//www.tianjin-qmedu.com/matlabcentral/answers/879-does-matlab-have-a-birthday-problem answer_1262
你写的,
沃尔特,用户指南包括:“mt19937ar:梅森素数捻线机,如[9]所述,梅森素数2 ^ 19937 - 1。这是发电机记录http://www.math.sci.hiroshima-u.ac.jp/ ~ m-mat / MT / emt.html。它有一段2 ^ 19937 - 1。创建的每个U(0,1)值是使用两个32位整数的发电机;可能的值都是2 ^ -53区间内严格的倍数(0,1)”。
特别注意,这不能产生任何区间[0,2 ^ (-53))
当我浏览文档的具体范围为每个发生器(这从Mathworks面前删除来自参考页面的信息,属于IMHO),我无法找到任何密度均匀分布生成器,实际上是在(0,1)。

登录置评。


查尔斯
查尔斯 2011年8月7日
我认为最简单的解决方案是定期生成随机数,然后设置所有值< = 0.5 0和值> 0.5比1。这应该很随机的。
2的评论
查尔斯
查尔斯 2011年8月7日
哦,没有注意到最初的限制。

登录置评。

类别

找到更多的在随机数生成帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!