作为一个强大的计算工具,MATLAB 中广泛使用了随机数来模拟和生成数据。随机数的质量和生成速度是探索和实现许多计算和算法的关键要素。本文将介绍如何在 MATLAB 中生成高质量的随机数。
1. MATLAB 中的随机数生成器
MATLAB 中使用的随机数是伪随机数(Pseudo-random number),即是由一个确定的算法生成的看似随机的数列。MATLAB 具有多种随机数生成器,其中最常用的是 rand 函数。该函数可以生成 0 至 1 之间的均匀分布的随机数。
rand 函数的语法如下:
```matlab
randomNumbers = rand(n)
```
其中 n 为返回的随机数个数。rand 函数每次生成的随机数是完全独立的,没有任何关联。如果需要生成更多的随机数,则需要增加 n 的值。下面的代码将生成 10000 个随机数。
```matlab
randomNumbers = rand(10000,1);
```
此外,还可以将 rand 函数与指定的分布函数结合使用,例如:normrnd 函数可用于生成正态分布的随机数,exprnd 函数可用于生成指数分布的随机数,等等。
2. 重新生成随机数
在使用随机数时,我们常常需要重新生成一组新的随机数。为了避免重复的随机数,我们需要在每一次运行程序时,生成不同的随机数。对于这种情况,我们可以使用 rng 函数。
rng 函数可以将 MATLAB 的随机数生成器设置为特定状态,以确保每次生成的随机数是不同的。通过设置不同的种子(seed),即可保证每次程序运行时,用 rng 函数生成的随机数序列都不同。
```matlab
rng(seed)
```
其中,seed 可以取任何数字,表示随机数生成器状态的初始化值。通常我们将 seed 设置为当前时间的毫秒数,以确保每次运行程序时启动时,随机数序列都不同。
```matlab
rng('shuffle')
```
rng 函数还可以使用 'shuffle' 作为参数,rand 函数将使用系统时间作为种子。这样,每次运行程序时,系统时间始终不同,从而生成不同的随机数序列。
3. 高质量随机数的生成
生成高质量的随机数需要满足以下条件:
- 随机数的分布应该尽可能地接近均匀或正态分布。
- 随机数应该是相互独立的。
- 随机数应该是可重现的,无论何时建立生成器,都可以再现相同的序列。
- 随机数应该是高速生成且具有良好的统计性能,例如通过多个独立的测试来检查随机数的熵。
4. 随机数生成测试
在生成随机数后,我们应该对其质量进行评估和测试。主要测试包括:
- 平均值和方差:在大量的随机数中,平均值应该尽可能的接近预期值(即 0.5),方差也应该接近理论值(即 1/12)。可使用 mean 和 var 函数来进行测试。
```matlab
mn = mean(randomNumbers); % 计算平均值
vr = var(randomNumbers); % 计算方差
```
- 相关性:测试随机数之间的相关性。可使用 corrcoef 函数进行测试。
```matlab
corrMatrix = corrcoef(randomNumbers);
```
- 分布检验:随机数应该尽可能地接近一个特定的分布。可以使用 normplot、histogram 和 kstest 函数进行测试。
```matlab
normplot(randomNumbers); % 绘制正态概率图
histogram(randomNumbers); % 绘制直方图
[h,pValue] = kstest(randomNumbers, 'CDF', 'norm'); % 进行正态分布检验
```
- 熵测试:熵是一个衡量随机数不可预测性和有序性的量。可以使用 entrofy 函数计算熵。
```matlab
entropyVal = entropy(randomNumbers); % 计算熵值
```
5. 总结
本文介绍了如何在 MATLAB 中生成高质量的随机数。我们了解了 MATLAB 中的随机数生成器以及如何重新生成随机数。然后,我们探讨了如何生成高质量的随机数,并介绍了常用的随机数生成测试,这些测试可以帮助我们检查随机数的质量。在应用随机数时,应尽可能确保随机数是高质量且可重复的。只有这样,我们才能在应用程序中使用高质量的随机数。