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

猜你喜欢

转载自blog.csdn.net/u011089523/article/details/81560955