MATLAB生成随机矩阵(5种方式)
如果一个矩阵中的元素至少有一个是随机的,那么该矩阵称为随机矩阵。在 MATLAB 中,一般随机矩阵的所有元素均为随机生成的。
每一次运行随即矩阵生成函数生成的随机矩阵中元素的数值都是不同的,因此读者使用随机矩阵函数运算时,与书中结果不同,而且每次运行结果都不同,出现这些情况是正常的。
按照随机矩阵的分布规则,可将随机矩阵分为两种:均匀分布的随机数矩阵和正态分布的随机数矩阵。根据取值区间的不同,可将随机矩阵分为区间 (0,1) 和 (0, max)。
下面介绍生成几种不同随机矩阵的函数。
【实例】随机矩阵生成示例。MATLAB程序如下:
【实例】创建由随机数组成的三维矩阵。MATLAB程序如下:
【实例】生成随机复数矩阵,MATLAB程序如下:
【实例】生成随机整数矩阵。MATLAB程序如下:
【实例】重置随机数生成器,MATLAB 程序如下:
【实例】生成无重复元素的随机整数向量,MATLAB 程序如下:
每一次运行随即矩阵生成函数生成的随机矩阵中元素的数值都是不同的,因此读者使用随机矩阵函数运算时,与书中结果不同,而且每次运行结果都不同,出现这些情况是正常的。
按照随机矩阵的分布规则,可将随机矩阵分为两种:均匀分布的随机数矩阵和正态分布的随机数矩阵。根据取值区间的不同,可将随机矩阵分为区间 (0,1) 和 (0, max)。
下面介绍生成几种不同随机矩阵的函数。
1、rand()函数
在 MATLAB 中,rand() 函数用来生成在区间 (0,1) 均匀分布的随机数矩阵,该函数的调用格式及说明如下表所示。调用格式 | 说明 |
---|---|
rand(m) | 在区间 [0,1] 生成 m 阶均匀分布的随机矩阵 |
rand(m,n) | 生成 m 行 n 列均匀分布的随机矩阵 |
X = rand(sz1,…,szN) | 生成由随机数组成的 sz1x...xszN 矩阵,其中 sz1,…,szN 指示每个维度的大小 |
rand(size(A)) | 在区间 [0,1] 创建一个与 A 维数相同的均匀分布的随机矩阵 |
X=rand(…, typename) | 生成由 typename 指定数据类型的随机数组成的矩阵 |
X = rand(…,'like',p) | 生成与 p 类似似的随机数组成的矩阵 |
【实例】随机矩阵生成示例。MATLAB程序如下:
>> clear % 清除工作区的变量 >> r=rand(5) % 在区间[0,1]生成5阶均匀分布的随机矩阵 ans = 0.0975 0.1576 0.1419 0.6557 0.7577 0.2785 0.9706 0.4218 0.0357 0.7431 0.5469 0.9572 0.9157 0.8491 0.3922 0.9575 0.4854 0.7922 0.9340 0.6555 0.9649 0.8003 0.9595 0.6787 0.1712
【实例】创建由随机数组成的三维矩阵。MATLAB程序如下:
>> clear % 清除工作区的变量 >> X = rand([3,3,3]) % 创建一个由随机数组成的 3×3×3三维矩阵X X(:,:,1) = 0.9502 0.3816 0.1869 0.0344 0.7655 0.4898 0.4387 0.7952 0.4456 X(:,:,2) = 0.6463 0.2760 0.1626 0.7094 0.6797 0.1190 0.7547 0.6551 0.4984 X(:,:,3) = 0.9597 0.2238 0.5060 0.3404 0.7513 0.6991 0.5853 0.2551 0.8909
2、randn()函数
在 MATLAB 中,randn() 函数用来创建正态分布的随机矩阵,该函数的调用格式及说明如下表所示。调用格式 | 说 明 |
---|---|
randn(m) | 在 [0,1] 区间内生成加阶正态分布的随机矩阵 |
randn(m,n) | 生成 m 行 n 列正态分布的随机矩阵 |
randn(size(A)) | 在 [0,1] 区间内创建一个与 A 维数相同的正态分布的随机矩阵 |
X = randn(…,typename) | 生成由 typename 指定数据类型的随机数组成的矩阵 |
X = randn(...,'like',p) | 生成与 p 同一类型随机数组成的矩阵 |
【实例】生成随机复数矩阵,MATLAB程序如下:
>> clear % 清除工作区的变量 >> X = randn + 1i*randn % 生成一个具有正态分布的实部和虚部的随机复数矩阵 X = -1.4916 - 0.7423i
3、randi()函数
在 MATLAB 中,randi() 函数用来生成均匀分布的伪随机整数矩阵,该函数的调用格式及说明如下表所示。调用格式 | 说明 |
---|---|
randi(imax) | 生成介于 1 和 imax 之间的均匀分布的伪随机整数 |
randi(imax,n) | 生成 n 阶介于 1 和 imax 之间的均匀分布的伪随机整数矩阵 |
randi(imax size(A)) | 创建与矩阵 A 维数相同的,介于 1 和 imax 之间的均匀分布的伪随机整数矩阵 |
【实例】生成随机整数矩阵。MATLAB程序如下:
>> clear % 清除工作区的变量 >> r = randi(20,1,5) % 生成元素值在 1 ~ 20 均匀分布的1×5随机整数向量 r = 4 3 10 20 7 >> r = randi([10 100],4,5) % 生成元素值在 10 ~ 100 均匀分布的4行5列随机整数矩阵 r = 69 35 73 49 27 25 14 38 44 54 74 18 96 79 50 12 84 13 82 68
4、rng()函数
在 MATLAB 中,rng() 函数设置随机数生成器,控制随机数生成,它的调用格式及说明如下表所示。调用格式 | 说明 |
---|---|
rng(seed) | 使用非负整数 seed 为随机数生成器提供种子,以使 rand、randi 和 randn 生成可预测的数字序列 |
rng('shuffle') | 根据当前时间为随机数生成器提供种子 |
rng(seed, generator) |
指定 rand、randi 和 randn 使用的随机数生成器的类型。generator 输入为以 下选项之一: twister:梅森旋转 simdTwister:面向 SIMD 的快速梅森旋转算法 combRecursive:组合多递归 philox:执行 10 轮的 Philox 4x32生成器 threefry:执行 20 轮的 Threefry 4x64 生成器 multFibonacci:乘法滞后 Fibonacci v5uniform:传统 MATLAB® 5.0 均匀生成器 v5normal:传统 MATLAB 5.0正常生成器 v4:传统 MATLAB 4.0 生成器 |
rng('default') | 将随机数生成器的设置重置为其默认值 |
scurr = rng | 返回 rand、randi 和 randn 使用的随机数生成器的当前设置 |
rng(s) | 将 rand、randi 和 randn 使用的随机数生成器的设置还原回之前用 s = rng 等命 令捕获的值 |
sprev = rng(…) | 返回 rand、randi 和 randn 使用的随机数生成器的以前设置,然后更改这些设置 |
【实例】重置随机数生成器,MATLAB 程序如下:
>> clear % 清除工作区的变量 >> s = rng; % 保存随机数生成器的当前状态 >> r = randn(2,5) % 创建随机矩阵r r = -1.0616 -0.6156 -0.1924 -0.7648 -1.4224 2.3505 0.7481 0.8886 -1.4023 0.4882 >> rng(s); % 将随机数生成器的状态恢复为s >> r1 = randn(2,5) % 创建一个由随机数组成的新 1×5 向量。随机值与之前相同 r = -1.0616 -0.6156 -0.1924 -0.7648 -1.4224 2.3505 0.7481 0.8886 -1.4023 0.4882随机矩阵每次的运行结果是随机的,若不设置随机生成器,上例中前后两次随机矩阵生成的值将不同。
5、randperm()函数
在 MATLAB 中,randperm() 函数生成区间为 [1,n] 的没有重复元素的随机整数向量,具体的调用格式及说明如表3-19所示。调用格式 | 说明 |
---|---|
p = randperm(n) | 在区间 [1,n] 生成包含 n 个元素的随机整数向量,不包含重复元素 |
p = randperm(n,k) | 在区间 [1,n] 生成随机整数向量,包括 k 个不重复元素。该函数输入指示釆样间隔中的 最大整数(采样区间中的最小整数为 1) |
【实例】生成无重复元素的随机整数向量,MATLAB 程序如下:
>> clear % 清除工作区的变量 >> r = randperm(8) % 在区间[1, 8]生成包含8个不重复元素的随机整数向量 r = 1 6 4 2 8 5 3 7 >> r = randperm(10,5) % 在区间[1, 10]生成包含5个不重复元素的随机整数向量 r = 10 2 6 9 4