咨询MATLAB中rand、randn函数分布及生成[-0.1,0.1]均匀伪随机数的方法
MATLAB rand与randn的分布类型界定
不同来源的描述偏差本质是混淆了函数原生输出和后续二次加工的分布属性,对照MATLAB官方定义的原生分布属性如下:
rand:原生输出为**[0, 1]区间上的连续均匀(等概率)分布**伪随机数,无额外变换的原生输出无其他分布特征randn:原生输出为均值为0、标准差为1的标准正态(高斯)分布伪随机数
补充:多数描述矛盾的来源,是将对
randn输出做截断、缩放后的二次结果,等同于函数本身的原生分布,实际二次变换后的分布已经和函数原生属性无关。
[-0.1, 0.1]区间均匀分布随机数的实现方案
针对“排除正态分布、生成指定区间等概率伪随机数”的需求,无需引入正态分布相关的生成逻辑,直接基于rand的原生均匀输出做线性缩放即可,整个过程会完全保留均匀分布的等概率属性。
实现逻辑
线性区间映射可完整保留原分布的均匀特性,通用计算关系为:输出值 = 区间下限 + rand生成值 * (区间上限 - 区间下限)
代入目标区间参数(下限-0.1、上限0.1,区间总跨度0.2),通用调用代码为:uni_rand = -0.1 + 0.2 * rand(目标数组维度参数)
调用示例
若需要生成3行4列的符合要求的随机数矩阵,直接执行以下代码即可:uni_rand = -0.1 + 0.2 * rand(3, 4);
生成的随机数会等概率覆盖整个[-0.1, 0.1]区间,无正态分布的中心聚集特征,完全符合需求。
内容的提问来源于stack exchange,提问作者Антон
相关产品推荐
相关产品推荐

