1. 程式人生 > >matlab生成隨機數的rand、randi和randn三種形式

matlab生成隨機數的rand、randi和randn三種形式

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