根据三维概率分布生成随机数



如何从给定的三维PDF中生成随机数?概率分布函数给出了粒子在三维空间中具有任意给定坐标集的概率。

我已经为PDF定义了函数,我可以每隔一段时间对其进行评估,但我不知道该从哪里开始。我会使用逆变换采样的方法,但由于PDF是3D的,我不知道我是否可以计算离散累积分布函数。有可能用另一种方法做到这一点吗?

感谢

如果空间坐标系是离散的,则将其视为生成三元组的单变量生成问题。

如果你谈论的是连续分布,你可能想要使用条件概率。原则上,你应该能够导出X的边际分布,Y给定X的条件分布,Z给定X&Y。然后根据它们的边际分布和条件分布依次生成X、Y和Z。

在实践中,这可能相当具有挑战性。

附录

也许最简单的方案是生成长度为3的多维法向量。这将在原点附近产生最高密度,并在所有方向上对称地逐渐减小。如果密度在其他位置最高,则可以用平均向量替换它,可以用不同的方差独立缩放维度,也可以通过指定方差/协方差矩阵来获得相关法线,从而诱导任意轴对齐。

如果可以容忍三维离散化,那么您可以通过为3D分布生成累积分布来实现这一点,其方式与为1D分布生成累积分配的方式类似。让我解释一下:

在1D中,你取p(x)并离散化,得到x上的pi=p(xi)。你可以把pi想象成一个表示概率分布的直方图。pi是p(x)在x范围内的积分,由x表示,它将具有一定的宽度。累积分布C(xi)则只是pi到xi,并查看这些映射到哪个xi值。

一个2D的例子就足以说明以上是如何推广到1D以上的:想象一个归一化的p(x,y),你可以将其离散为p(xi,yj)。然后可以求和,使Ci,j=C(xi,yj)。在进行集成时,您只需要选择是先使用"xi"还是"yj。要么你像C1,1,C2.1一样蜿蜒前行。。。,Cn,1,C1,2。。。或者索引翻转。在任何一种情况下,结果都将是一个在0和1之间的唯一值的Ci,j数组。然后,您可以选择一个0到1之间的统一随机数,对应于Ci,j,然后映射到一个唯一的xi、yj坐标对。这会从离散概率分布中为您提供一个随机数,并自动处理x和y之间存在的所有相关性。

如果需要,可以使坐标离散化非常精细,但随着采样维度数量的增加,这将变得非常昂贵(https://en.wikipedia.org/wiki/Curse_of_dimensionality)。

最新更新