【问题标题】:How does random() * random() distribution look like? [duplicate]random() * random() 分布如何? [复制]
【发布时间】:2013-07-06 03:54:31
【问题描述】:

给定一个函数random(),它返回均匀分布在0和1之间的浮点值。

函数random() * random()的分布类型是什么?

【问题讨论】:

    标签: math random distribution


    【解决方案1】:
    # test.py
    import numpy as np
    import matplotlib.pyplot as plt
    
    N = 10**6
    plt.hist(np.random.uniform(size=N) * np.random.uniform(size=N), bins=50, normed=True)
    plt.show()
    

    运行python test.py 产生:

    【讨论】:

      【解决方案2】:

      类型是Product Distribution,不再统一了。

      【讨论】:

        【解决方案3】:

        变换是 y = x*x。 x 在 0

        y 的 CDF 为 Fy(y

        现在微分得到 fy(y) = 1/(2*sqrt(y)) 在同一范围内。

        编辑:

        上述解决方案假设“random() * random()”每次抽签都使用相同的值。相反,如果您希望相乘的值彼此独立,则数学会涉及更多,但仍然易于处理。

        现在让

        y1 = x1*x2 其中 fx1(x1) = 1 on 0

        假设 x1 和 x2 独立,则联合 PDF 为

        fx1x2(x1,x2) = fx1(x1)*fx2(x2)。

        引入一个额外的变量 y2 来处理 2 变量联合 PDF 的转换。为了更好的计算,让 y2 = x2。

        所以我们的系统是

        g1(x1,x2) = x1*x2

        g2(x1,x2) = x2

        在更简单的情况下,我们需要反转函数,现在通过求解 y1 和 y2:

        h2(y1,y2) = x2 (= y2)

        h1(y1,y2) = y1/x2 = y1/y2

        我们需要雅可比行列式

        J = (pg1/px1)(pg2/px2) - (pg1/px2)(pg2/x1)

        其中“p”是偏导数。

        所以在我们的例子中

        J = (x2)(1) - (x1)(0) = x2。

        转换公式(来自任何介绍微积分的概率文本)是

        fy1y2(y1,y2) = fx1x2(x1,x2)/J

        在我们的例子中简化为

        1/y2 在 0

        最后,为了得到 fy1(y1),我们对不需要的变量 y2 上的联合分布进行积分,注意保持在正确的范围 y1/y2 = 0。

        fy1(y1) = (1/y2)dy2 = -ln(y1) 在 0

        请注意,在这两种情况下,乘积的分布都偏向于较小的值,因为分数 (0

        【讨论】:

          猜你喜欢
          • 2012-01-31
          • 2018-10-18
          • 2018-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-24
          • 2017-07-16
          • 1970-01-01
          相关资源
          最近更新 更多