基于数值分布函数生成随机数

计算科学 蒙特卡洛
2021-12-21 23:34:41

我有一个概率分布函数,我没有它的分析形式(所以我无法确定它的 CDF)。如何根据此分布函数生成随机数?我正在寻找一种类似于使用 CDF 的方法。

2个回答

您的目标是获得反函数。

给定概率分布您正在寻找点,使得到该点的累积概率与均匀分布的结果一致 (您正在将均匀分布转换为您自己的分布)。ρ(x)yU

因此你有:

yρ(x)dx=U

可以迭代获得,例如,使用 Newton Raphson 方法:y

yn+1=ynynρ(x)dxUρ(yn)

给定从每个统一评估得到的系列将根据您的分布以概率排列y(U,y)Uy

更重要的是,您必须使用数值方法求解积分,因为您没有密度的解析表达式。

这正是蒙特卡洛方法的设计目的。Metropolis-Hastings 采样器是从您的分布中抽取样本的一种方法示例。