随机数在科学、工程和计算机科学等领域里扮演着至关重要的地位,它在随机化算法、统计分析、模拟和噪声生成等许多领域都有广泛应用。在matlab中,我们可以生成许多不同类型的伪随机数序列,使得我们能够轻松地构建需要随机性的问题和应用程序。本文将介绍如何。
一、随机数的生成
matlab提供了许多生成随机数的函数,其中最常用的有:
- rand函数:产生一个在[0,1]区间内均匀分布的随机数。
- randn函数:产生一个均值为0,标准差为1的正态(高斯)分布的随机数。
- randi函数:产生一个在指定范围内的均匀分布的整数随机数。
- randperm函数:产生一个指定长度的随机排列。
需要注意的是,由于计算机是通过算法计算伪随机数,因此matlab生成的都是伪随机数,而非真正的随机数。
二、随机数的种子
随机数的生成是由随机数生成器和随机数种子两部分组成的。随机数生成器是通过一系列的算法生成伪随机数的,而随机数种子是算法起始时的一个输入值,通过不同的随机数种子可以得到不同的随机数序列。
在matlab中,可以使用rand函数和randn函数产生随机数序列,这两个函数都可以设定随机数种子。rand函数通过RandStream类来管理随机数种子和状态,而randn函数通过控制rng函数来管理,我们可以使用以下命令来设置种子:
- RandStream.setDefaultStream():设置全局随机数种子
- RandStream.getGlobalStream():获取全局随机数种子
- RandStream.create():使用自定义随机数种子和状态创建随机数生成器
- rng(seed, 'twister'):设置随机数种子
种子设定后,我们可以通过rand或randn函数来获取一个或一组伪随机数。
三、随机数的质量
在实际应用中,需要使用高质量的伪随机数,因为伪随机数的质量直接影响到模拟或实验结果的准确性。因此,在matlab中生成高质量的伪随机数是很重要的。
matlab提供了几种不同的随机数生成器供我们选择,其中常用的有基于两个梅森旋转的Mersenne Twister随机数生成器和基于仿射变换的Linear Congruential随机数生成器。Mersenne Twister随机数生成器是一个高维曲面作为随机数种子的生成器,它拥有很高的随机性和均匀性。而Linear Congruential随机数生成器则是一种简单的伪随机数发生器,需要更小的计算和内存资源,但在质量和随机性方面可能会相对差些。
在matlab中,如果我们需要使用高质量的随机数,我们可以使用Mersenne Twister随机数生成器来代替默认的Linear Congruential随机数生成器。可以通过以下命令来设置:
RandStream.setGlobalStream(RandStream('mt19937ar', 'Seed', 0))
四、随机数使用的示例
下面是生成伪随机数的使用示例:
1. 生成1到100之间的随机整数
randi([1, 100], 1)
2. 生成10个在[-1,1]区间内的均匀分布的随机数
rand(10, 1) * 2 - 1
3. 生成10个均值为0,标准差为1的正态分布的随机数
randn(10, 1)
4. 生成5x5矩阵的随机置换
randperm(25)
5. 生成1000个0到1之间的均匀分布随机数,并绘制其直方图
r = rand(1000,1);
histogram(r)
总之,在matlab中生成高质量的伪随机数序列并不难,只需要选择合适的随机数种子和生成器即可。当然,在使用随机数时,我们应该注意到随机性应该避免被滥用,以免引起问题或错误。