8

你能告诉我任何生成非均匀随机数的方法吗?
我正在使用 Java,但代码示例可以是任何你想要的。

一种方法是通过将两个均匀随机数相加(即掷 2 个骰子)来创建偏态分布。

4

3 回答 3

11

尝试生成均匀分布的随机数,然后将反向非均匀累积分布函数应用于每个随机数。

于 2009-06-10T18:27:55.310 回答
7

你想要什么样的偏差分布?

这是一种总是有效的技术,但并不总是最有效的。累积分布函数 P(x) 给出了值低于 x 的时间分数。因此,在 x 的最低可能值处 P(x)=0,在 x 的最高可能值处 P(x)=1。每个分布都有一个唯一的 CDF,它以 P(x) 从 0 上升到 1 的方式对分布的所有属性进行编码。如果 y 是区间 [0,1] 上的均匀偏差,则 x 满足 P(x )=y 将根据您的分配进行分配。为了使这项工作在计算上进行,您只需要一种为您的分布计算 P(x) 倒数的方法。

Meta.Numerics库定义了大量常用的分布(例如正态、对数正态、指数、卡方等),并具有计算每个分布的 CDF(Distribution.LeftProbability)和逆 CDF(Distribution.InverseLeftProbability)的函数.

有关对特定分布快速的专门技术,例如用于正态分布偏差的 Box-Muller 技术,请参阅 Numerical Recipies 一书。

于 2009-06-10T18:54:25.927 回答
1

如果您使用的是 Java,那么我的Uncommons Math库可能会引起您的兴趣。它包括为均匀分布、高斯分布、泊松分布、二项分布和指数分布生成随机数的类。 本文展示了如何使用这些发行版。

于 2009-06-21T10:06:19.860 回答