1

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

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

4

3 回答 3

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

在此处输入图像描述

于 2013-07-08T18:23:18.333 回答
2

类型是Product Distribution,不再统一。

于 2013-07-08T18:07:43.627 回答
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))。

编辑:

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

现在让

y1 = x1*x2 其中 fx1(x1) = 1 on 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

我们需要雅可比行列式

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 <= y1/y2 <= 1 和 0 <= y2 <= 1 范围内。

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

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

请注意,在这两种情况下,乘积的分布都偏向于较小的值,因为分数 (0 <= x <= 1) 乘以分数是较小的分数。

于 2013-07-09T21:49:28.203 回答