1. Inverse Transform Method
1.1 Model Overview
不论何种随机变量, 定有一个相对应的分布函数, 且由分布函数的性质可以确定其在 区间是单调递增的, 故具有广义反函数. 模拟的思路即为通过生成均匀分布随机数 模拟其分布函数数值 , 再通过寻找分布函数的反函数确定其随机变量 的数值.
1.2 Simulation Goal
生成一系列离散型随机变量 , 其概率密度函数服从:
1.3 Simulation Method
- Generate a random number .
- Let:
- For , , so:
此时的 即为所求.
1.4 Notes
Algorithm expression:
- Generate a random number .
- If , set and stop.
- If , set and stop.
- If , set and stop.
若 是顺序排列的, 即 , 且记 , 则:
换言之, 该过程即为寻找 对应的 .
1.5 Example: Generate a Given Discrete Distribution
要求: 生成随机变量 满足:
Solution 1.
- Generate .
- If , set and stop.
- If , set and stop.
- If , set and stop.
- Otherwise set .
Solution 2.
- Generate .
- If , set and stop.
- If , set and stop.
- If , set and stop.
- 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:
- Generate a random number .
- Set , , .
- If , set and stop.
- Set , , .
- 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
end3. 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:
- Generate a random number .
- Set , , , .
- If , set and stop.
- Set , , .
- 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