本节介绍 MATLAB 中生成随机数的常用函数:rand、randn、randi 与 randperm,以及用 rng 固定种子以实现可复现的伪随机序列。上述工具常用于模拟实验、随机采样与蒙特卡洛估计。
三个常用函数
| 函数 | 分布 | 取值范围 |
|---|---|---|
rand | 均匀分布 | [0, 1) 之间的小数 |
randn | 标准正态分布 | 均值 0、标准差 1 |
randi | 均匀分布整数 | 调用时给出的整数范围 |
rand:均匀分布小数
rand % 一个 0~1 之间的数
rand(3) % 3x3 矩阵
rand(2, 4) % 2x4 矩阵要生成 [a, b] 之间的数,用平移缩放 a + (b-a)*rand:
% 生成 0~10 之间的 3 个随机数
10 * rand(1, 3)randn:正态分布
均值 μ、标准差 σ 的正态分布写成 mu + sigma*randn:
randn % 一个标准正态数
randn(100, 1) % 100 个
mu = 5; sigma = 2;
data = mu + sigma * randn(1, 1000); % 均值 5、标准差 2randi:随机整数
rng(1)
randi(6) % 1~6,掷骰子
randi(10, 2, 3) % 2x3 的 1~10 整数
randi([5, 10], 4) % 4x4 的 5~10 整数先 rng(1) 再调用 randi,两次运行会得到同一组数。省略 rng 时每次结果都可能不同。
ans = 1
ans =
8 5 7
3 5 8
ans =
5 5 10 8
10 7 10 10
7 9 5 7
9 6 5 6randperm:随机排列
把 1 到 n 打乱成不重复的排列,抽签、洗牌时常用它。与多次调用 randi 不同,randperm 保证抽出的数互不重复:
randperm(10) % 1~10 的一个随机排列
randperm(10, 3) % 从 1~10 里随机抽 3 个不重复的数可复现:rng 设置随机种子
这里的随机是算法生成的伪随机序列。同一种子会得到同一串数,写报告或对照两次运行时应用 rng 固定种子:
rng(42) % 固定种子
a = rand(1, 5) % 两次运行得到同一组数
rng('shuffle') % 按当前时间换新的种子先调用 rng(42) 再生成随机数,才能保证后面的 rand / randn / randi 可复现。只在脚本末尾写 rng 不会改变已经生成的结果。
常见误区
- 忘记用
rng:报告或论文里的实验往往需要固定种子才能复现。 - 以为
rand能取到 1:它是 [0, 1) 左闭右开,不会正好等于 1。 - 混淆
rand和randn:前者为均匀分布,后者为标准正态分布。
本节说明了均匀分布、正态分布与整数随机数的生成方式,以及 rng 对实验可复现性的作用。下一节介绍数学与统计:初等函数、取整与 mean、std 等描述性统计量。