一起來學演化計算-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相乘后的結果是一個單位矩陣,將其和單位矩陣相減后得到結果誤差十分小