1
lehui99 OP 第一个1 - 5有误,大家看最后的1 - 4条即可。
|
2
cmy5001 2014-11-03 16:18:08 +08:00
x = random();
y = x*x; return y; |
4
cmy5001 2014-11-03 16:41:20 +08:00
sorry,应该是:
return sqrt(random()); |
5
hahastudio 2014-11-03 16:57:54 +08:00
http://blog.pluskid.org/?p=430
涉及到概率密度函数的就得推导了= = |
6
wy315700 2014-11-03 17:18:50 +08:00 1
@cmy5001
@lehui99 想了一下,LZ要求的是连续变量的概率分布问题,如果不计算计算机在实数上的近似的话。 连续变量y满足概率分布 P(y in [0,k]) = k * k 随机的x = random()则满足概率分布 P(x in [0,k]) = k 一般的,已知 P(x in [0,k]) = k P(y in [0,k]) = f(k) 求如何用x生成y 令y = g(x) 则,x = g-1(k) (反函数或逆函数) 前提是g是一个一一映射的函数 P(x in [0,k]) = k P(g(x) in [0,g(k)]) = k 将这个函数看成关于k的函数,则 P(g(x) in [0,k]) = g-1(k) 也就是 P(y in [0,k]) = g-1(k) g-1(k) = f(k) 也就是g是f的反函数 x * x的反函数是sqrt(x) 证毕 没有函数编辑器,看起来不是很方便啊。 |
8
wisatbff 2014-11-03 18:52:03 +08:00
每一段内要均匀分布还是?
|
9
kamushin 2014-11-03 19:47:32 +08:00
@wy315700 这里说的不错。但是我想指出一些可能让人不理解的地方。因为原文总是以概率分布这个词来概括PDF(概率分布函数)和CDF(累积分布函数)。
原理应该是这样的: FX(x)是概率分布X的累积分布函数,假设FX(x)是增函数,那么存在反函数FX-1。若a是[0,1]区间上均匀分布的随机变量,那么FX-1(a)服从X分布。 |
10
semicircle21 2014-11-03 20:34:23 +08:00
我不确定我理解了楼主的问题, 但我之前模拟正态分布随机时, 这样做过: (大概是个土法子, 但运行效果还行)
比如: 在 [0, N] 之间, 则取 M 次 随机数的平均数, M越大, 结果越集中. 如果要把概率集中点调到 0, 减 N/2 再取绝对值应该可以. |