【发布时间】:2013-07-06 03:54:31
【问题描述】:
给定一个函数random(),它返回均匀分布在0和1之间的浮点值。
函数random() * random()的分布类型是什么?
【问题讨论】:
标签: math random distribution
给定一个函数random(),它返回均匀分布在0和1之间的浮点值。
函数random() * random()的分布类型是什么?
【问题讨论】:
标签: math random distribution
# 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 产生:
【讨论】:
类型是Product Distribution,不再统一了。
【讨论】:
变换是 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
【讨论】: