random()* random()分布如何?

时间:2013-07-08 17:58:17

标签: math random distribution

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

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

3 个答案:

答案 0 :(得分:3)

# 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会产生:

enter image description here

答案 1 :(得分:2)

类型为Product Distribution,不再统一。

答案 2 :(得分:0)

转换是y = x * x。 x在0 <= x <= 1的范围内具有概率分布函数fx(x)= 1.然后,x的累积分布函数在相同范围内是Fx(x)= x。

y的CDF是Fy(y <= Y)= Fx(sqrt(Y))= sqrt(Y),0 <= Y <= 1。

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

编辑:

上述解决方案假定&#34; random()* random()&#34;每次抽奖都依赖于相同的值。相反,如果您希望相乘的值彼此独立,则数学更复杂但仍易于处理。

现在让

y1 = x1 * x2其中fx1(x1)= 1,0 <= x1 <= 1,并且类似地对于x2。

假设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

我们需要Jacobian

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

其中&#34; p&#34;是偏导数。

所以在我们的案例中

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

转换公式(来自任何基于入门微积分的概率文本)

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

在我们的案例中简化为

1 / y2,范围0 <= y1 / y2 <= 1且0 <= y2 <= 1。

最后,为了获得fy1(y1),我们将关节分布积分在不需要的变量y2上,注意保持在正确的范围y1 / y2 <= 1或y1 <= y2,因为y2> = 0。

fy1(y1)=在0 <= y1 <= 1的范围内从(1 / y2)dy2 = -ln(y1)的y1到1的积分。

注意,在两种情况下,产品的分布被加权以支持较小的值,因为分数(0 <= x <= 1)乘以分数是较小的分数。