给定函数random()
,它返回在0和1之间均匀分布的浮点值。
函数random() * random()
的分布类型是什么?
答案 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
会产生:
答案 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)乘以分数是较小的分数。