You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求生成服从指定密度函数随机变量的第二种算法(已掌握一种)

生成服从给定密度函数的随机变量的有效方法

嘿,先帮你澄清一个关键误区:你当前尝试的步骤并不能生成服从目标密度的随机变量。直接把Unif(0,1)的随机数代入$f(x)$,得到的只是密度函数在该点的取值,和符合目标分布的样本完全是两回事。下面给你两种实用的正确生成方法:

方法一:逆变换采样法

逆变换是生成随机变量的经典方法,核心思路是先求出累积分布函数(CDF),再对其求逆,最后用均匀随机数代入逆函数得到样本。

  1. 计算目标分布的CDF
    对密度函数$f(t)$从0到x积分,得到累积分布函数$F(x)$:
    $$
    F(x) = \int_{0}^{x} \left( \frac{1}{4} + 2t^3 + \frac{5}{4}t^4 \right) dt
    $$
    计算后得到:
    $$
    F(x) = \frac{1}{4}x + \frac{1}{2}x^4 + \frac{1}{4}x^5 \quad (0<x<1)
    $$
    验证一下:当$x=1$时,$F(1)=\frac{1}{4}+\frac{1}{2}+\frac{1}{4}=1$,完全符合CDF的性质。

  2. 生成样本的具体步骤

    • 生成一个$\text{Unif}(0,1)$的随机数$U$
    • 解方程$\frac{1}{4}X + \frac{1}{2}X^4 + \frac{1}{4}X^5 = U$,得到的$X$就是符合目标密度的随机变量。
    • 由于这个方程没有解析解,你需要用数值方法(比如牛顿-拉夫逊迭代)来求解$X$,只要迭代初始值选在(0,1)区间内,收敛速度会很快。

方法二:接受-拒绝采样法

如果逆变换的数值求解对你来说有点麻烦,接受-拒绝法是个不错的替代方案,它用一个容易采样的“提议分布”来覆盖目标分布,通过筛选得到有效样本。

  1. 选择提议分布并确定常数$M$
    我们选最简单的$\text{Unif}(0,1)$作为提议分布,它的密度$g(x)=1$($0<x<1$)。接下来要找一个常数$M$,使得$f(x) \leq M \cdot g(x)$对所有$0<x<1$成立。

    先求$f(x)$在(0,1)的最大值:对$f(x)$求导得$f'(x)=6x² + 5x³$,在(0,1)区间内导数始终为正,说明$f(x)$是单调递增的,所以在$x=1$处取最大值:
    $$
    f(1)=\frac{1}{4}+2+\frac{5}{4}=4
    $$
    所以取$M=4$,此时$f(x) \leq 4 \times 1$对所有$0<x<1$都成立。

  2. 生成样本的具体步骤

    • 生成第一个均匀随机数$X \sim \text{Unif}(0,1)$
    • 生成第二个均匀随机数$Y \sim \text{Unif}(0,1)$
    • 判断:如果$Y \leq \frac{f(X)}{M} = \frac{1}{4}f(X)$,就接受$X$作为目标样本;如果不满足,就拒绝$X$,重复上述步骤直到得到一个被接受的样本。

小补充

  • 逆变换采样的优势是每个均匀随机数最终都能得到一个有效样本(只要数值解方程收敛),而接受-拒绝法会有一定的拒绝率,这里的拒绝率是$1-\frac{1}{4}=75%$,也就是平均每4次尝试能得到1个有效样本。
  • 如果想降低拒绝率,也可以选择更贴近目标分布的提议分布(比如某个Beta分布),不过计算$M$的过程会稍微复杂一点。

内容的提问来源于stack exchange,提问作者Guest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:38:22