1. Inverse Transform Method

1.1 Model Overview

不论何种随机变量, 定有一个相对应的分布函数, 且由分布函数的性质可以确定其在 区间是单调递增的, 故具有广义反函数. 模拟的思路即为通过生成均匀分布随机数 模拟其分布函数数值 , 再通过寻找分布函数的反函数确定其随机变量 的数值.

1.2 Simulation Goal

生成一系列离散型随机变量 , 其概率密度函数服从:

1.3 Simulation Method

  1. Generate a random number .
  2. Let:
  1. For , , so:

此时的 即为所求.

1.4 Notes

Algorithm expression:

  1. Generate a random number .
  2. If , set and stop.
  3. If , set and stop.
  4. If , set and stop.

若 是顺序排列的, 即 , 且记 , 则:

换言之, 该过程即为寻找 对应的 .

1.5 Example: Generate a Given Discrete Distribution

要求: 生成随机变量 满足:

Solution 1.

  1. Generate .
  2. If , set and stop.
  3. If , set and stop.
  4. If , set and stop.
  5. Otherwise set .

Solution 2.

  1. Generate .
  2. If , set and stop.
  3. If , set and stop.
  4. If , set and stop.
  5. Otherwise set .

1.6 Example: Generate a Geometric Random Variable

See Generating Geometric Random Variables from Uniforms.

要求: 生成随机变量 满足参数为 的几何分布:

由几何分布的含义, 可认为是 次独立实验中首次成功的时间, 且每次实验的成功概率为 , 故有:

故可以生成随机数 并令:

Therefore,

下需解出 的具体数值. 由对数函数的单调性, 对 式集合中不等式两侧求对数:

若用记号 表示不大于 的最大整数, 则有:

其等价于:

2. Generate a Poisson Random Variable

See Generating Poisson Random Variables from Uniforms.

2.1 Model Overview

  • 该算法的思路与逆变换法 (第 1 节) 一致: 通过生成 模拟泊松分布的分布函数, 再寻找其对应的自变量值 . 不同之处在于泊松分布的函数正常计算较为复杂, 故采取递推方式计算.
  • 递推的思路: 首先仍生成一均匀分布 代表泊松分布函数, 然后开始循环讨论. 从 开始, 看 的值是否大于生成的 的值. 若是则该 即为想要模拟的 , 若不是则 , 继续讨论.
  • 简而言之, 对于递推形式, 算法的核心在于依次比较 与 的大小, 第一个使得 的 即为所求的 .

2.2 Simulation Goal

Generate a random variable following a Poisson distribution with parameter :

2.3 Simulation Method

采用递推的方式进行计算:

Algorithm:

  1. Generate a random number .
  2. Set , , .
  3. If , set and stop.
  4. Set , , .
  5. Go to Step 3.

2.4 Code

function x = cspoirnd(lam, n)
x = zeros(1, n);
j = 1;
while j < n
  flag = 1;
  u = rand(1);
  i = 0;
  p = exp(-lam);
  F = p;
  while flag
    if u <= F
      x(j) = i;
      flag = 0;
      j = j + 1;
    else
      p = lam * p / (i + 1);
      i = i + 1;
      F = F + p;
    end
  end
end

3. Generate a Binomial Random Variable

See Generating Binomial Random Variables from Uniforms.

3.1 Model Overview

  • 与泊松分布的生成方法类似.
  • 注意的是当 或泊松分布中的 较大时, 算法有较大的改进空间. 但讲义中并未提及, 故略去.

3.2 Simulation Goal

Generate a binomial random variable :

3.3 Simulation Method

采用递归形式:

Algorithm:

  1. Generate a random number .
  2. Set , , , .
  3. If , set and stop.
  4. Set , , .
  5. Go to Step 3.

3.4 Remarks

  • 这里 即为上述的常数项, 为递归形式的 , 为累积的分布函数.
  • 要注意到循环的次数总是比确定的 值大一. 显然, 即使 , 也要经过一次循环比较才能确定.
  • 根据二项分布的性质, 当 时可以通过上述算法生成 , 即为所求.
  • 另一种实现方法为模拟 次实验的结果.

3.5 Code

X = zeros(1, 100);
x = 0:2;
pr = [0.3 0.2 0.5];
 
for i = 1:100
  u = rand;
  if u <= pr(1)
    X(i) = x(1);
  elseif u <= sum(pr(1:2))
    X(i) = x(2);
  else
    X(i) = x(3);
  end
end