题目
编写程序,设定随机数种子确保可复现性;生成区间 [0, 1] 上的均匀分布随机矩阵,区间 [a, b] 上的均匀分布随机矩阵,以及均值为 0、标准差为 1 的标准正态分布随机矩阵。
输入格式:无需外部输入。
输出格式:打印生成的随机矩阵及对应区间的实测均值。
数据范围与约定:伪随机数生成。
思路与算法
1. 随机种子重置
在单元测试和工程复现时,使用 rand("seed", 42) 或 rng(42) 重置随机种子,确保每次运行得到完全相同的随机序列。
2. 自定义区间线性映射rand(M, N) 产生 $[0, 1)$ 均匀分布,若需要产生 $[a, b]$ 区间的随机数,使用线性缩放公式:x = a + (b - a) * rand(M, N)。
3. 标准正态分布 randnrandn(M, N) 产生期望 $\mu = 0$、标准差 $\sigma = 1$ 的高斯白噪声。若需要期望 $\mu$、标准差 $\sigma$,使用公式:x = mu + sigma * randn(M, N)。
完整程序
% Octave / MATLAB 第22题:随机矩阵生成
rand("seed", 100);
randn("seed", 100);
% 1. 标准 [0, 1) 均匀分布
R_uni = rand(2, 3);
% 2. 映射至区间 [10, 20]
a = 10; b = 20;
R_scale = a + (b - a) * rand(2, 3);
% 3. 标准正态分布 (高斯分布)
R_norm = randn(2, 3);
fprintf("[0, 1) 均匀随机数 rand(2, 3):\n");
disp(R_uni);
fprintf("[10, 20] 线性缩放随机数:\n");
disp(R_scale);
fprintf("标准正态分布 randn(2, 3):\n");
disp(R_norm);运行示例
输出:
[0, 1) 均匀随机数 rand(2, 3):
0.4756 0.6740 0.5539
0.1485 0.3577 0.3411
[10, 20] 线性缩放随机数:
16.023 19.604 10.270
12.259 18.621 15.775
标准正态分布 randn(2, 3):
1.705188 -0.407395 -0.095914
0.339284 1.002970 0.936110