
- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 功能
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上版
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if 語句
- MATLAB - if-else 語句
- MATLAB - if-elseif-else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - return 語句
- MATLAB - 無返回值函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try...catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等值線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換函式
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣求逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 隨機數
隨機數是從一大組數字中隨機選擇的數字。計算機生成的隨機數稱為偽隨機數。偽隨機數生成利用一種演算法,該演算法內部利用數學公式生成不可預測的隨機數字位。偽隨機數在計算機應用中非常有用,例如遊戲、密碼學等。
Matlab 提供了許多函式,例如 rand、randn 和 randi,可以生成隨機數。對於高階隨機數,我們可以使用 RandStream 類。
另一個函式 randperm 建立整數的隨機排列。
讓我們透過示例來了解每個函式。
使用 rand 函式
rand - 此函式將返回均勻分佈的隨機數。函式的語法如下所述。
語法
a = rand a = rand(n) a = rand(sz1, sz2,.....szn) a = rand(sz) a = rand(_, typename) a = rand(_, “like”, p) a = rand(s,_)
序號 | 語法和描述 |
---|---|
1 | a = rand 這將返回一個 0 到 1 之間的隨機數。 |
2 | a = rand(n) 這將返回一個均勻分佈的隨機數。它將是一個 nxn 矩陣。 |
3 | a = rand(sz1, sz2,.....szn) 這將返回一個大小為 sz1 x szn 的均勻分佈的隨機數陣列。 例如,rand(2,3) 返回一個大小為 2×3 的矩陣。因此,隨機數陣列的大小將為 2×3。 |
4 | a = rand(sz) 這裡的向量大小為 sz。該函式將返回一個大小為 sz 的隨機數陣列。例如,rand([2,3]) 將返回一個大小為 2×3 的陣列。 |
5 | a = rand(_, typename) 此處返回的隨機數陣列的型別為 typename。例如,“single”、“double”。 |
6 | a = rand(_, “like”, p) 這將為您提供一個與 p 具有相同資料型別或複雜性(實數或複數)的隨機數陣列。您可以使用 typename 或“like”,但不能同時使用兩者。 |
7 | a = rand(s, _) 隨機數是從流 s 中建立的。您可以使用 RandStream 建立一個流。 |
讓我們看看上面討論的每種語法的示例。
示例 1
a = rand
執行後的輸出如下:
a = 0.9584
在這個例子中,我們只是呼叫 rand 函式。該值儲存在變數 a 中。
給定的值為 0.9584,生成的數值介於 0 到 1 之間。
讓我們再次呼叫 rand 函式。
a= rand
執行後的輸出如下:
a = 0.075312
再次使用相同的函式,值現在為 0.075312。
示例 2
在這個例子中,我將嘗試使用 n 值呼叫 rand。
a = rand(4)
執行後的輸出如下:
a = 0.750825 0.930217 0.168903 0.781070 0.732294 0.017075 0.545846 0.483156 0.609990 0.311062 0.415960 0.369801 0.871756 0.556813 0.401244 0.225472
我們傳遞給 rand 的數字是 4。因此,它返回一個大小為 4x4 的矩陣,其中包含如上所示的隨機數。
現在讓我們使用數字 2 並檢視如下所示的 2x2 矩陣:
a = rand(2)
執行後的輸出如下:
a = 0.8271 0.5491 0.9997 0.1035
示例 3
在這個例子中,我們將 nxn 矩陣傳遞給 rand 函式。
a = rand(3,3)
執行後的輸出如下:
a = 0.5684 0.3099 0.4883 0.7016 0.8126 0.9140 0.2272 0.4579 0.8909
生成的矩陣大小為 3x3。
讓我們檢查另一個具有 2x4 矩陣的示例。
a = rand(2,4)
執行後的輸出如下:
a = 0.5362 0.6302 0.8595 0.4848 0.3148 0.1463 0.6696 0.5108
示例 4
在這個例子中,我們將使用大小為 [3,4] 的向量陣列在 rand 函式中,如下所示
a = rand([3,4])
執行後的輸出如下:
a = 8.6458e-01 4.6462e-03 6.8987e-01 5.7768e-01 7.2335e-01 2.8741e-01 3.4124e-01 7.6021e-02 2.8896e-01 6.9273e-01 4.4906e-01 8.4528e-01
輸出是一個 3x4 矩陣。
讓我們嘗試另一個具有 [2,2] 向量陣列的示例。
a = rand([2,2])
執行後的輸出如下:
a = 0.6734 0.4422 0.4438 0.3153
示例 5
在這個例子中,我們將傳遞 typename 並檢視生成的隨機數的輸出。
a = rand(3,"single")
執行後的輸出如下:
a = 0.124537 0.265118 0.110287 0.395455 0.102573 0.826784 0.062113 0.124306 0.141749
第一個引數是 3,因此它將建立一個 3x3 的單精度 typename 矩陣。
讓我們看看另一個例子
a = rand([2,3], "double")
執行後的輸出如下:
a = 0.078242 0.617494 0.702426 0.721792 0.878933 0.199488
在上面的例子中,我們傳遞了一個 [2,3] 向量,它生成一個型別為 double 的 2x3 矩陣。
示例 6
在這個例子中,讓我們首先建立一個大小為 2x2 的單精度矩陣。
p = single([3 2; -2 1])
執行後的輸出如下:
p = 3 2 -2 1
現在讓我們在 rand 函式中使用 p,如下所示
a = rand(size(p),"like",p)
執行後的輸出如下:
a = 2×2 single matrix 0.1966 0.6160 0.2511 0.4733
它返回一個大小為 2x2 的隨機數矩陣。
示例 7
在這個例子中,讓我們首先建立一個流,如下所示:
s = RandStream('dsfmt19937')
現在讓我們在 rand 函式中使用流 s,如下所示:
a = rand(s,[3 3])
使用 randn 函式
randn - 此函式與 rand 相同,唯一的區別是它將返回正態分佈的隨機數。函式的語法如下所述。
語法
a = randn a = randn(n) a = randn(sz1, sz2,.....szn) a = randn(sz) a = randn(_, typename) a = randn(_, “like”, p) a = randn(s,_)
序號 | 語法和描述 |
---|---|
1 | a = randn 這將從標準正態分佈返回一個隨機標量數。 |
2 | a = rand(n) 這將返回一個來自標準正態分佈的 nxn 矩陣。 |
3 | a = rand(sz1, sz2,.....szn) 這將返回一個大小為 sz1 x szn 的隨機數陣列。 例如,rand(2,3) 返回一個大小為 2x3 的矩陣。因此,隨機數陣列的大小將為 2x3。 |
4 | a = rand(sz) 這裡的向量大小為 sz。該函式將返回一個大小為 sz 的隨機數陣列。例如,rand([2,3]) 將返回一個大小為 2x3 的陣列。 |
5 | a = rand(_, typename) 此處返回的隨機數陣列的型別為 typename。例如,“single”、“double”。 |
6 | a = rand(_, “like”, p) 這將為您提供一個與 p 具有相同資料型別或複雜性(實數或複數)的隨機數陣列。您可以使用 typename 或“like”,但不能同時使用兩者。 |
7 | a = rand(s, _) 隨機數是從流 s 中建立的。您可以使用 RandStream 建立一個流。 |
讓我們看看上面討論的每種語法的示例。
示例 1
a = randn
執行後的輸出如下:
a = -0.1226
在這個例子中,我們只是呼叫 randn 函式。該值儲存在變數 a 中。
給定的值為 0.5377,該值是從標準正態分佈生成的,即它的均值為 0,標準差為 1。
示例 2
在這個例子中,我將嘗試使用 n 值呼叫 randn。
a = randn(2)
執行後的輸出如下:
a = 0.1708 -0.9527 1.8627 2.8103
我們傳遞給 randn 的數字是 2。因此,它返回一個大小為 2x2 的矩陣,其中包含如上所示的隨機數。
示例 3
在這個例子中,我們將 nxn 矩陣傳遞給 rand 函式。
a = randn(3,3)
執行後的輸出如下:
a = 0.067762 0.519480 -0.568026 0.267630 0.232140 -1.267290 0.808611 1.462018 1.039429
生成的矩陣大小為 3x3。
示例 4
在這個例子中,我們將使用大小為 [3,4] 的向量陣列在 randn 函式中,如下所示
a = randn([3,4])
執行後的輸出如下:
a = -0.2043 -0.4831 -0.4446 0.4228 0.2926 2.2891 1.5870 0.3228 0.4624 -1.0989 1.2035 -0.4612
輸出是一個 3x4 矩陣。
示例 5
在這個例子中,我們將傳遞 typename 並檢視生成的隨機數的輸出。
a = randn(3,"single")
執行後的輸出如下:
a = 1.6072 -0.4121 0.2886 0.7244 1.3422 0.9589 0.9034 0.6775 -0.5273
第一個引數是 3,因此它將建立一個 3x3 的單精度 typename 矩陣。
示例 6
在這個例子中,讓我們首先建立一個大小為 2x2 的單精度矩陣。
p = single([3 2; -2 1])
執行後的輸出如下:
p = 3 2 -2 1
現在讓我們在 rand 函式中使用 p,如下所示
a = randn(size(p),"like",p)
它返回一個大小為 2x2 的隨機數矩陣。
示例 7
在這個例子中,讓我們首先建立一個流,如下所示:
s = RandStream('dsfmt19937')
現在讓我們在 randn 函式中使用流 s,如下所示
a = randn(s,[3 3])
使用 randi 函式
randi - 處理均勻分佈的偽隨機整數。
語法
a = randi(imax) a = randi(imax,n) a = randi(imax,sz1,...,szN) a = randi(imax,sz) a = randi(___,typename) a = randi(___,"like",p) a = randi([imin,imax],___) a = randi(s,___)
序號 | 語法和描述 |
---|---|
1 | a = randi(imax) 這將返回一個介於 0 到 imax 之間的偽隨機標量整數。 |
2 | a = randi(imax,n) 這將返回一個 nxn 矩陣,其中包含介於 [1, imax] 之間的整數。 |
3 | a = randi(imax,sz1,...,szN) 這將返回一個大小為 sz1 x szn 的隨機整數陣列。 例如,randi(10, 2,3) 返回一個大小為 2x3 的矩陣,其中包含介於 1 到 10 之間的偽隨機整數。 |
4 | a = randi(imax,sz) 這裡的向量大小為 sz。該函式將返回一個大小為 sz 的隨機整數陣列。例如,randi(10, [2,3]) 將返回一個大小為 2x3 的陣列,其中包含介於 1 到 10 之間的隨機整數。 |
5 | a = randi(_, typename) 介於 1 到 imax 之間的隨機整數陣列,型別為 typename。例如,“single”、“double”、“int8”、“uint8”、“int16”、“uint16”、“int32”、“uint32”或“logical”。 |
6 | a = rand(_, “like”, p) 這將為您提供一個偽隨機整數陣列,類似於 p 或複雜度(實數或複數)類似於 p。您可以使用 typename 或“like”,但不能同時使用兩者。 |
7 | a = randi([imin,imax],___) 這將返回一個偽隨機整數陣列,該陣列位於 imin 和 imax 指定的區間內。 |
8 | a = rand(s, _) 隨機數由流s建立。您可以使用 RandStream 建立流。 |
示例 1
在這個例子中,讓我們看看 a = randi(imax) 的輸出。
a = randi(6)
執行後的輸出如下:
a = 2
示例 2
在這個例子中,我們將看到 a = randi(imax,n) 的輸出。
a = randi(5,3)
執行後的輸出如下:
a = 5 1 5 1 4 1 5 2 5
示例 3
讓我們檢查 a = randi(imax,sz1,...,szN) 的輸出。
這裡 imax 將使用 8,矩陣大小將為 2,3。
a = randi(8,2,3)
執行後的輸出如下:
a = 7 4 2 2 4 5
示例 4
讓我們檢查 a = randi(imax,sz) 的輸出。
這裡 imax 將使用 8,矩陣大小將為 [2,3]。
a = randi(8,[2,3])
執行後的輸出如下:
a = 6 7 5 2 7 3
示例 5
在這個例子中,我們將傳遞 typename 並檢視生成的隨機整數的輸出。
a = randi(5, "int32")
執行後的輸出如下:
a = 3
示例 6
在這個例子中,我們將傳遞 typename 並檢視生成的隨機整數的輸出。
a = randi(10,size(p),"like",p)
示例 7
在這個例子中,讓我們檢查 imin 和 imax 區間內的偽隨機整數。
r = randi([1,5],3,3)
執行後的輸出如下:
r = 3 2 3 4 1 1 1 4 1
imin 為 1,imax 為 5。大小為 3x3 的矩陣是從區間 [1,5] 生成的。
示例 8
在這個例子中,讓我們首先建立一個流,如下所示:
s = RandStream('dsfmt19937')
如下所示,流在 randi 函式中使用。
a = randi(s,[1,10],[2 3])
使用 randperm 函式
randperm − 隨機數透過整數的隨機排列生成。
語法
a = randperm(n) a = randperm(n,k) a = randperm(s,___)
序號 | 語法和描述 |
---|---|
1 | a = randperm(n) 這將返回一個行向量,該向量包含 1 到 n 的排列整數,並且不會重複任何值。 |
2 | a = randperm(n,k) 這將返回一個行向量,該向量包含從 1 到 n 的排列中隨機選擇的 k 個唯一整數。 |
3 | a = randperm(s,___) 隨機排列生成基於隨機數流 s 的整數。 |
示例 1
在這個例子中,我們將檢視使用 a = randperm(n) 生成的輸出。我們將使用 n 為 10。因此排列將從 1 到 10 進行。
a = randperm(10)
執行後的輸出如下:
a = 8 7 5 4 10 6 2 1 3 9
示例 2
讓我們檢查從函式 a = randperm(n,k) 返回的 k 個唯一整數的行向量。其中 k = 5,n = 10。
a = randperm(10,5)
執行後的輸出如下:
a = 1 2 10 5 4
示例 3
在這個例子中,讓我們使用流進行排列。
s = RandStream('dsfmt19937')
現在讓我們在 a = randperm(s,___) 中使用流。
a = randperm(s,6)