Matlab语言内置了五种强大的随机数生成函数:
- 使用rand函数,可以轻松生成(0, 1)区间内均匀分布的随机浮点数。
- randn函数则用于生成均值为0、方差为1的正态分布随机数。
- randi(imax)能生成在[1, imax]范围内的均匀分布伪随机整数。
- randsrc(m, n, [alphabet; prob])用于创建一个m行n列的矩阵,矩阵元素从预定的字母表alphabet中按概率prob抽取。
- randperm(n)可生成1到n之间的随机排列。
相较之下,C++语言在生成随机数时需借助rand()和srand()两个函数。
在C++ 11之前的版本中,主要依赖这两个函数来实现随机数生成。而在C++ 11及以后版本中,提供了更多选择和功能,此处不作深入讨论。
rand()函数返回一个在0至RAND_MAX之间的整数。RAND_MAX是一个定义在头文件中的常数。
值得注意的是,该函数返回的数字并非严格意义上的随机数,而是通过算法生成的伪随机数。这些数字的生成依赖于种子(seed),不同的种子会产生不同的随机数序列。系统默认的种子通常是固定的(如1),因此若不进行特别设置,每次程序运行时生成的随机数序列将是可预测的。
若要使每次程序运行时变量x的值不同,需要使用srand()函数来设置rand()函数的种子。通常,我们会使用当前时间(通过time函数获取)作为srand()函数的输入参数,以确保每次运行时都能获得不同的种子。
time函数返回自1970年1月1日以来的秒数。在调用rand()函数之前,应先调用srand()函数并传入当前时间作为参数。
例如:
注意:虽然计算机系统提供了这些工具来生成伪随机数,但这些数字并非真正的随机数。它们是通过算法计算得出的,用于模拟随机性。在实际应用中,我们通常使用这些伪随机数来近似真实的随机性。
对于限制随机数的范围至1到某个特定值max的情况,可以使用求余数运算符(%)来获取整除后的余数。例如,当max为6时,通过适当的计算和加法操作,可以获得范围在1至6之间的随机整数。