给定一个函数random(),它返回均匀分布在0和1之间的浮点值。
random() * random()函数的分布类型是什么
发布于 2013-07-09 02:23:18
# 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会产生以下结果:

发布于 2013-07-09 02:07:44
类型是Product Distribution,它不再是统一的。
发布于 2013-07-10 05:49:28
变换为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))。
编辑:
上面的解决方案假设"random() * random()“对每次绘制都使用相同的值。相反,如果您希望相乘后的值彼此独立,则需要更多的数学运算,但仍然很容易处理。
现在让我们
0 <= x1 <= 1上的y1 = x1*x2,其中fx1(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
我们需要雅可比矩阵
(pg1/px1)(pg2/px2) - (pg1/px2)(pg2/x1)
其中"p“是偏导数。
所以在我们的例子中
J= ( x2 )(1) - (x1)(0) =x2。
转换公式(来自任何基于微积分的入门概率文本)是
fy1y2(y1,y2) = fx1x2(x1,x2)/J
在我们的例子中,它简化为
范围0 <= y1/y2 <= 1和0 <= y2 <= 1上的1/y2。
最后,为了得到fy1( y1 ),我们对不需要的变量y2上的联合分布进行积分,注意保持在正确的范围y1/y2 <= 1或y1 <= y2中,因为y2 >= 0。
fy1( y1 ) =在范围0 <= y1 <= 1上从y1积分到(1/y2)dy2 = -ln(y1)中的1。
请注意,在这两种情况下,由于分数(0 <= x <= 1)乘以分数是较小的分数,因此乘积的分布是有利于较小值的加权。
https://stackoverflow.com/questions/17533032
复制相似问题