如何从给定的三维 PDF 生成随机数?概率分布函数给出了粒子在 3D 空间中具有任何给定组坐标的概率。
我已经为 PDF 定义了函数,我可以在离散的时间间隔对其进行评估,但我不知道从那里去哪里。我会使用逆变换采样的方法,但是由于PDF是3D的,我不知道我是否可以计算出离散累积分布函数。是否可以使用另一种方法来做到这一点?
谢谢
如何从给定的三维 PDF 生成随机数?概率分布函数给出了粒子在 3D 空间中具有任何给定组坐标的概率。
我已经为 PDF 定义了函数,我可以在离散的时间间隔对其进行评估,但我不知道从那里去哪里。我会使用逆变换采样的方法,但是由于PDF是3D的,我不知道我是否可以计算出离散累积分布函数。是否可以使用另一种方法来做到这一点?
谢谢
如果您的空间坐标系是离散的,请将其视为生成三元组的单变量生成问题。
如果您谈论的是连续分布,您可能想要使用条件概率。原则上,您应该能够推导出 X 的边际分布、给定 X 的 Y 的条件分布以及给定 X 和 Y 的 Z 的条件分布。然后从它们的边际和条件分布依次生成 X、Y 和 Z。
在实践中,这可能非常具有挑战性。
附录
也许最简单的方案是生成长度为 3 的多维法线向量。这将在原点附近提供最高密度,并在所有方向上对称地逐渐变细。如果其他位置的密度最高,您可以用平均向量替换它,您可以使用不同的方差独立缩放维度,或者您可以通过指定方差/协方差矩阵来诱导任意轴对齐以获得相关法线。
如果可以容忍离散化您的三个维度,那么您可以通过为 3D 分布生成累积分布来做到这一点,其方式与为 1D 分布执行此操作的方式类似。让我解释:
在 1D 中,您取 p(x) 并离散化以在 x 上得到 p i = p(x i )。您可以将 p i视为表示概率分布的直方图。p i是 p(x) 在 x i表示的 x 范围内的积分,它将具有一定的宽度。然后,累积分布 C(x i ) 只是 p i到 x i的总和,并且将是一些 'S' 形单调函数,范围在 0 和 1 之间。然后绘制 0 之间的均匀随机数和 1 对应于 C i并查看这些映射的 x i值。
一个 2D 示例足以了解上述如何推广到 1D 以上:想象一个标准化的 p(x,y),您可以将其离散为 p(x i ,y j )。然后,您可以将其相加,得到 C i,j = C(x i ,y j )。在进行集成时,您只需要选择是先进行 'x i ' 还是 'y j '。要么你像 C 1,1, C 2,1,..., C n,1, C 1,2,... 一样蛇行,要么索引翻转。无论哪种情况,结果都是 C i,j0 到 1 之间唯一值的数组。然后,您可以在 0 到 1 之间选择一个对应于 C i,j的统一随机数,然后映射到唯一的 x i,y j坐标对。这为您提供了来自离散概率分布的随机数,并自动处理 x 和 y 之间存在的所有相关性。
如果需要,您可以使您的坐标离散化非常精细,但是随着您增加从中采样的维度数量(https://en.wikipedia.org/wiki/Curse_of_dimensionality),这会变得非常昂贵。