本节介绍 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、标准差 2

randi:随机整数

MATLAB 随机整数 randi 示例运行
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    6

randperm:随机排列

把 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 等描述性统计量。