【问题标题】:Probability of generating a particular random number, such as in MATLAB生成特定随机数的概率,例如在 MATLAB 中
【发布时间】:2013-07-10 15:45:10
【问题描述】:

在实际概率中,从区间 (0,1) 中的所有实数中选择的随机数 p 的概率为 0.5。但是,这种可能性是多少

rand == 0.5

在 MATLAB 中?我想这就像问在 0 和 1 之间有多少个双精度数,或者可能还有其他因素在起作用。

【问题讨论】:

  • 见:How many double numbers are there between 0.0 and 1.0?。但是,如果我没记错的话,Mersenne Twister 算法基于 [1,2) 进行计算,然后进行移位。
  • 我可能错了(很久以前记不太清了),但我相信p 等于 0.5 的概率实际上是未定义的,而不是 0。定义分布时在诸如实数区间之类的不可数集上,唯一定义的概率是当p 是区间的某个子集s 的成员时,s 必须有一个(Lebesgue?)测量值大于零。抱歉,这并不能直接回答您关于双打的主要问题,但在这种情况下思考可能会有所帮助。
  • @SamRoberts:来自sigma algebra 的正确术语是“almost surely”,通常缩写为 a.s.
  • @horchler 现在它开始回归了 - 谢谢,我会很高兴地提醒自己什么是 sigma 代数!

标签: matlab random probability


【解决方案1】:

没有关于 MATLAB 生成器的具体信息...

一般来说,即使是简单的 pseudo-random generators 也有足够长的周期,可以覆盖所有可以用 double 表示的值。

如果 MATLAB 使用其他形式来生成随机数,那就更好了 - 所以假设它均匀地覆盖了整个 double 值范围。

我相信概率是:围绕您感兴趣的值的可表示数字之间的距离除以间隔的长度。关于距离的讨论见What is the minimal step in double data type? (.NET)

【讨论】:

    【解决方案2】:

    查看this question,我们看到有262 - 252 在区间 (0 1) 中翻倍。因此,选择任何一个(如 0.5)的概率大致等于 1 除以该数字,或

    >> p = 1/(2^62-2^52) 
    ans =
        2.170523997312134e-019
    

    但是,正如 horchler 已经指出的那样,它还取决于您使用的随机数生成器的类型,以及 MATLAB 的实现。遗憾的是,我对每种方法的实现细节只有基本的了解,但您可以查看 here 以获取 MATLAB 中可用的随机数生成器列表,并进一步谷歌以获取更精确的数字。

    【讨论】:

    • 请注意,0 和 1 之间的大多数点会比 1 更接近 0,因此我猜你的估计更多的是一个下限。
    • @DennisJaheruddin:这是真的...... Mersienne Twister 是从 (0,1) 中以相同的概率选择任何double,还是任何number?如果是第一种情况,我的回答是正确的。但我确实希望 second 案例成为算法的目标,因此,您必须查看两个单独的间隔 (0,X)(X, 1)(在这种情况下为 X = 0.5)和修改数字。
    【解决方案3】:

    我不确定阿列克谢是不是想这么说,但受他的启发,我认为概率确实是大约 0.5 左右的数字之间的距离。

    因此我预计概率约为:

    eps(0.5) 
    

    计算结果为 1.1102e-16


    鉴于双数之间差异的单调性,我实际上认为这是成立的:

    eps(0.5-eps(0.5)) <= yourprobability  <= eps(0.5) 
    

    表示范围为 5.5511e-17 到 1.1102e-16

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 2013-12-06
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      相关资源
      最近更新 更多