matlab生成隨機數的rand、randi和randn三種形式
阿新 • • 發佈:2018-12-12
matlab中關於隨機數的產生有3種庫函式,下面我們來看看它們的形式:
1、rand(…)
它是生成0~1之間(開環,不包含0和1兩個數)均勻分佈的偽隨機數,也就是無窮次試驗其中每個數產生的概率是一樣的。
它的函式格式如下:
<span style="color:#000000"><code> R = rand(N) % 生成N×N的矩陣隨機數,其中每個元素位於<span style="color:#006666">0</span>~<span style="color:#006666">1</span>之間 R = rand([M,N,P,<span style="color:#000088">...</span>]) % 生成M×N×P×<span style="color:#000088">...</span>的矩陣隨機數 R = rand(M,N,P,<span style="color:#000088">...</span>) % 同上,中括號不是必須 R = rand(<span style="color:#000088">...</span>, CLASSNAME) % 生成CLASSNAME型別的隨機數,如 <span style="color:#009900">'double'</span> or <span style="color:#009900">'single'</span> </code></span>
- 1
- 2
- 3
- 4
例如生成double型別的5×3均勻分佈的0到1間隨機數:
<span style="color:#000000"><code>R = <span style="color:#000088">rand</span>(<span style="color:#006666">5</span>,<span style="color:#006666">3</span>,<span style="color:#009900">'double'</span>);</code></span>
- 1
同理,我們想要生成100個位於[a,b]間的資料可表示為:
<span style="color:#000000"><code>R = <span style="color:#006666">a</span> + (b-<span style="color:#006666">a</span>).*rand(<span style="color:#006666">100</span>,<span style="color:#006666">1</span>)<span style="color:#880000">;</span></code></span>
- 1
2、randi(…)
randi(N) 是生成(0,N]間均勻分佈的偽隨機數,並且數都是整數,所以每個數是位於1到N之間。它的表達形式有以下幾種:
<span style="color:#000000"><code>R = randi(iMax) % 生成<span style="color:#006666">1</span>:iMax之間的均勻分佈隨機數
R = randi(iMax,m,n) % 生成m×n的<span style="color:#006666">1</span>:iMax之間的均勻分佈隨機數
R = randi([iMin,iMax],m,n) % 生成m×n的iMin:iMax之間的均勻分佈隨機數</code></span>
- 1
- 2
- 3
例如:
<span style="color:#000000"><code>R1 = randi(<span style="color:#006666">10</span>,<span style="color:#006666">5</span>,<span style="color:#006666">1</span>); % 生成<span style="color:#006666">5</span>×<span style="color:#006666">1</span>的<span style="color:#006666">1</span>:<span style="color:#006666">10</span>之間隨機數
R2 = randi([<span style="color:#006666">10</span>,<span style="color:#006666">20</span>],<span style="color:#006666">2</span>,<span style="color:#006666">3</span>); % 生成<span style="color:#006666">2</span>×<span style="color:#006666">3</span>的<span style="color:#006666">10</span>:<span style="color:#006666">20</span>之間隨機數</code></span>
- 1
- 2
3、randn(…)
有時候我們希望生成的隨機數是呈現正態分佈的,而不是隨機分佈,這時候我們就需要使用randn函數了。它生成的隨機數整體概率為正態分佈,均值為0,方差為1。也就是說生成的數中出現0的概率最大,而越往無窮或者負無窮概率越小,但是出現的隨機數可能為所有實數,只不過出現的概率不同。它的格式如下:
<span style="color:#000000"><code>R = randn(<span style="color:#000088">N</span>) % 生成<span style="color:#000088">N</span>×<span style="color:#000088">N</span>個正態分佈的隨機數
R = randn(M,<span style="color:#000088">N</span>) % 生成M×<span style="color:#000088">N</span>個正態分佈的隨機數</code></span>
- 1
- 2
例如:
<span style="color:#000000"><code>R =<span style="color:#009900"> randi(3); % 生成3×3的正態分佈的隨機數</span></code></span>
- 1
4、穩定的重啟分佈rng
這裡我們來看一下如何讓每次程式執行生成的隨機數都一樣,主要藉助的是rang函式,格式如下:
<span style="color:#000000"><code>rng(<span style="color:#009900">'default'</span>);
R = <span style="color:#4f4f4f">rand</span>(<span style="color:#006666">1</span>,<span style="color:#006666">5</span>); <span style="color:#880000">% 每次程式執行生成恆定的1×5隨機數</span></code></span>
- 1
- 2
此外還有生成同樣分佈的表達方式:
<span style="color:#000000"><code>s = rng;
R1 = <span style="color:#4f4f4f">rand</span>(<span style="color:#006666">1</span>,<span style="color:#006666">5</span>);
rng(s);
R2 = <span style="color:#4f4f4f">rand</span>(<span style="color:#006666">1</span>,<span style="color:#006666">5</span>); <span style="color:#880000">% R1和R2隨機數一樣</span></code></span>
- 1
- 2
- 3
- 4
個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!
轉載請註明出處:http://blog.csdn.net/fx677588/article/details/72811673