matlab基本函數 randn,rand,orth


一起來學演化計算-matlab基本函數randn, rand, orth

覺得有用的話,歡迎一起討論相互學習~

我的微博我的github我的B站

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM