一起来学演化计算-matlab基本函数randn, rand, orth 觉得有用的话,欢迎一起讨论相互学习~
randn X = randn随机从正态分布中选一个数作为结果
X = randn(n)随机从正态分布中选n*n个数组成一个(n,n)的正方形矩阵
r = randn(5) r = 0.5377 -1.3077 -1.3499 -0.2050 0.6715 1.8339 -0.4336 3.0349 -0.1241 -1.2075 -2.2588 0.3426 0.7254 1.4897 0.7172 0.8622 3.5784 -0.0631 1.4090 1.6302 0.3188 2.7694 0.7147 1.4172 0.4889 X = randn(sz1,...,szN)从正态分布中随机数形成(sz1,...,szN)形状的矩阵
r = randn(1,5) r = 0.5377 1.8339 -2.2588 0.8622 0.3188 rand均匀分布随机数
语法X = rand 返回区间(0,1)内的一个均匀分布的随机数。
X = rand(n) 返回一个n×n的随机数矩阵。
X = rand(sz1,...,szN) 返回一个sz1-by-…-by-szN随机数数组,其中sz1,…,szN表示每个维度的大小。例如,rand(3,4)返回一个3×4矩阵。
X = rand(sz) 返回一个随机数数组,其中大小向量sz指定数组size。例如,rand([3 4])返回一个3×4矩阵。
X = rand( ___ ,typename ) 返回数据类型typename的随机数数组。typename输入可以是\'single\'或\'double\'。您可以使用前面语法中的任何输入参数。
X = rand( ___ ,\'like\',p) 返回一个随机数字数组,如p;也就是说,与p具有相同的对象类型。您可以指定typename或“like”,但不能同时指定两者。
语法 随机数矩阵生成一个由0到1之间的均匀分布随机数组成的5×5矩阵
r = rand(5) r = 0.8147 0.0975 0.1576 0.1419 0.6557 0.9058 0.2785 0.9706 0.4218 0.0357 0.1270 0.5469 0.9572 0.9157 0.8491 0.9134 0.9575 0.4854 0.7922 0.9340 0.6324 0.9649 0.8003 0.9595 0.6787 指定区间内的随机数在区间(-5,5)内生成一个10×1的均匀分布数列向量
r = -5 + (5+5)*rand(10,1) r = 3.1472 4.0579 -3.7301 4.1338 1.3236 -4.0246 -2.2150 0.4688 4.5751 4.6489一般情况下,你可以在(a,b)区间内生成N个随机数,公式为\(r = a + (b-a).*rand(N,1)\)
满足均匀分布的随机整数使用randi函数(而不是rand)从10到50之间的均匀分布生成5个随机整数
r = randi([10 50],1,5) r = 43 47 15 47 35 随机复数在区间(0,1)中生成一个包含实部和虚部的随机复数
a = rand + 1i*rand a = 0.8147 + 0.9058i 复位随机数种子保存随机数生成器的当前状态,并创建一个1×5的随机数向量
s = rng; r = rand(1,5) r = 0.8147 0.9058 0.1270 0.9134 0.6324 % 将随机数生成器的状态恢复为s,然后创建一个新的1×5的随机数向量。值与之前相同 rng(s); r1 = rand(1,5) r1 = 0.8147 0.9058 0.1270 0.9134 0.6324 3维随机数组创建一个3×2×3的随机数数组
X = rand([3,2,3]) X(:,:,1) = 0.8147 0.9134 0.9058 0.6324 0.1270 0.0975 X(:,:,2) = 0.2785 0.9649 0.5469 0.1576 0.9575 0.9706 X(:,:,3) = 0.9572 0.1419 0.4854 0.4218 0.8003 0.9157 指定随机数的数据类型创建一个1×4的随机数字向量,其元素都是单精度的
r = rand(1,4,\'single\') r = 0.8147 0.9058 0.1270 0.9134 class(r) ans = single 克隆已有矩阵的形状创建与现有数组大小相同的随机数矩阵
A = [3 2; -2 1]; sz = size(A); X = rand(sz) X = 0.8147 0.1270 0.9058 0.9134 或 X = rand(size(A)); 从现有数组克隆大小和数据类型创建一个2×2矩阵的单精度随机数
p = single([3 2; -2 1]); Create an array of random numbers that is the same size and data type as p. X = rand(size(p),\'like\',p) X = 0.8147 0.1270 0.9058 0.9134 class(X) ans = single orth求矩阵的标准正交基(PS:矩阵分析时代离我已经遥远)
不过记得意思好像是,正交矩阵的转置乘以正交矩阵得到的是单位矩阵
Q = orth(A)返回A的范围的一组标准正交基。Q的列向量张成了A的范围。Q中的列数等于A的秩。
满秩 % 计算并验证满秩矩阵范围的标准正交基向量。 % 定义一个矩阵并求出秩 A = [1 0 1;-1 -2 0; 0 1 -1]; r = rank(A) r = 3 % 由于A是满秩的方阵,orth(A)计算的标准正交基与奇异值分解计算的矩阵U相匹配,[U,S] = svd(A,\'econ\')。这是因为A的奇异值都是非零的。 利用orth计算A的值域的标准正交基 Q = orth(A) Q = -0.1200 -0.8097 0.5744 0.9018 0.1531 0.4042 -0.4153 0.5665 0.7118 % Q中的列数等于秩(A)因为A是满秩的,Q和A的大小是一样的。 % 验证基Q是正交的,并且在合理的误差范围内归一化。 E = norm(eye(r)-Q\'*Q,\'fro\') E = 9.6228e-16 % Q矩阵的转置和Q相乘后的结果是一个单位矩阵,将其和单位矩阵相减后得到结果误差十分小