具有任意概率分布的随机数仅使用rand()

psi*_*lia 5 c random algorithm math probability

我正在寻找一种简单的算法,如何仅使用ANSI rand()函数生成伪随机浮点数,但具有任意概率分布.对于简单的统一分布,我使用以下代码:

x = (float)rand() / (float)RAND_MAX;
Run Code Online (Sandbox Code Playgroud)

当然它不是很准确,但足以满足我的需求.我还需要其他发行版如logistic和gaussian.理想情况下,我必须使用有限长度的简单向量定义任意pdf,例如对于logistic pdf,此向量可能如下所示:

logistic_pdf = {0., 0.26894, 0.33924, 0.41742, 0.5, 0.58257, 0.66075, 1.};
Run Code Online (Sandbox Code Playgroud)

并且为了统一(使用相同的维度8):

uniform_pdf = {0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125};
Run Code Online (Sandbox Code Playgroud)

这只是一个想法.但我不确定如何有效地使用它rand()->{0...RAND_MAX}.

ste*_*fan 3

没有简单的算法可以完成任意复杂的事情。您必须为每个“任意”分布找到逆概率积分变换。

  • 我同意你的回答的精神,但应该指出逆变换不是唯一可用的方法。事实上,它不适用于像高斯这样不可逆的累积分布函数(因为没有很好的积分封闭形式)。我建议 OP 查阅有关该主题的文本,例如 Sheldon Ross 的《模拟》,因为该主题的内容比他想象的要多。 (2认同)