MATLAB随机数用于模拟实验、随机采样、蒙特卡洛等方法。常用的是 randrandnrandi,需要结果可复现时再用 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 示例运行
randi(6)          % 1~6,掷骰子
randi(10, 2, 3)   % 2x3 的 1~10 整数
randi([5, 10], 4) % 4x4 的 5~10 整数

randperm:随机排列

把 1 到 n 打乱成不重复的排列,抽签、洗牌常用它:

randperm(10)       % 1~10 的一个随机排列
randperm(10, 3)    % 从 1~10 里随机抽 3 个不重复的数

可复现:rng 设置随机种子

这里的随机是伪随机。同一个种子会生成同一串数,调试和复现实验时用 rng 固定:

rng(42)          % 固定种子
a = rand(1, 5)   % 这次和下次运行结果一样

rng('shuffle')   % 每次运行换新的种子

常见误区

  • 忘记用 rng:报告或论文里的实验往往需要固定种子才能复现。
  • 以为 rand 能取到 1:它是 [0, 1) 左闭右开,不会正好等于 1。
  • 混淆 randrandn:一个是均匀分布,一个是正态分布。