rand生成(0,1)均匀分布随机数,randn生成标准正态分布随机数,randi生成指定区间整数,rng控制可重现性,统计验证确保分布正确。
如果您在MATLAB中需要生成随机数,但对rand与randn函数的适用场景和输出特性存在混淆,则可能是由于未区分其概率分布类型。以下是针对该问题的多种实现方式:
一、理解rand函数的核心行为
rand函数用于生成在开区间(0, 1)内服从均匀分布的伪随机数,每个数值出现的概率密度恒定,适用于需要等概率采样的场合。
1、输入rand(3)可生成3×3阶矩阵,所有元素均位于0到1之间,且无系统性偏移;
2、输入rand(2, 5)将生成2行5列的矩阵,每个元素独立采样自(0, 1)均匀分布;
3、输入-2 + 4*rand(1, 6)可将结果线性映射至区间(-2, 2),保持均匀性不变;
4、输入rand('double')或rand('single')可显式指定数值精度类型;
5、输入rand(size(A))可生成与现有矩阵A维度完全一致的随机矩阵。
二、理解randn函数的核心行为
randn函数生成服从标准正态分布(均值为0、方差为1)的伪随机数,数值围绕零点密集分布,尾部呈指数衰减,适用于模拟自然噪声或中心极限现象。
1、输入randn(3)生成3×3矩阵,元素包含正负值,典型范围约为[-3, 3];
2、输入randn(4, 2)生成4行2列矩阵,每项独立采样自N(0,1)分布;
3、输入randn(1, 10000); hist(___, 50)可绘制直方图,验证其钟形轮廓;
4、输入0.5 + 2*randn(5, 5)可将分布平移缩放为均值0.5、标准差2的新正态分布;
5、输入randn('like', single(1))可生成单精度格式的标准正态随机数。
三、使用randi生成整数型随机数
randi函数专用于生成指定区间内的均匀分布伪随机整数,避免浮点舍入误差,适用于索引、分类标签或离散状态建模。
1、输入randi(10)生成1至10之间的单个随机整数(闭区间);
2、输入randi([5, 15], 3, 4)生成3行4列矩阵,每个元素取自整数区间[5, 15];
3、输入randi(100, [2, 3, 4])生成2×3×4三维整数数组;
4、输入randi(2, 1, 8)常用于生成伯努利试验序列(1或2),等效于硬币翻转建模;
5、输入randi(int8(255), 100, 100)可直接生成int8类型图像噪声矩阵。
四、控制随机数生成的可重现性
通过rng函数设定随机数生成器的状态,确保相同种子下每次运行产生完全一致的随机序列,这对算法验证与实验复现至关重要。
1、输入rng(123)将全局随机流重置为固定种子123;
2、输入s = rng; 后续调用rng(s)可恢复此前状态;
3、输入rng('shuffle')基于系统时间初始化,每次运行结果不同;
4、输入rng(default)恢复MATLAB启动时的默认设置;
5、输入rng(0, 'twister')显式指定Mersenne Twister算法及初始状态。
五、验证分布特性的关键操作
借助统计函数与可视化手段,可快速判别rand与randn输出是否符合预期分布形态,避免误用导致模型偏差。
1、输入mean(rand(1, 1e6))应趋近于
0.5
,而mean(randn(1, 1e6))应趋近于0;
2、输入var(rand(1, 1e6))应接近1/12 ≈ 0.0833,var(randn(1, 1e6))应接近1;
3、输入skewness(randn(1, 1e5))应接近0,体现对称性;
4、输入kurtosis(randn(1, 1e5))应接近3,符合正态峰度;
5、输入histogram(randn(1, 1e4), 'Normalization', 'pdf'); hold on; x = -4:0.1:4; plot(x, normpdf(x), 'r-')可叠加理论PDF曲线比对。
