日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解

發(fā)布時間:2025/4/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題來源:

? ? ? ? ? ? ?在學習matlab中看到書上有許多關于生成隨機數的應用,y書上一開始會寫一個rand('state',0),注釋是為了方便驗證,一開始并不是很理解,最近搜索網上文章等深入理解了下關于MATLAB中生成隨機數函數的相關應用。

二、問題探究

1:rand(....)

? ? ? ? 它是生成(0,1)之間(開環(huán),不包含0和1兩個數)均勻分布的偽隨機數,也就是無窮次試驗其中產生的概率是一樣。

R = rand? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%返回一個在區(qū)間(0,1)內均勻分布的隨機數

R = rand(N)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %生成NxN的矩陣隨機數,其中每個元素位于0~1之間

R = rand(M,N,P,......)? ? ? ? ? ? ? ? ? %生成一個MxNxPx........的矩陣隨機數

R = rand([M,N,P.....])? ? ? ? ? ? ? ? ? %同上,中括號不是必須的,例如:rand([3,4])返回一個3x4的矩陣

R = rand(......,CLASSNAME)?? %生成CLASSNAME類型的隨機數,如‘double’? or? ‘single’類型

?示例:

(1):由隨機數組成的矩陣

>>R = rand(5) %生成一個由介于 0 和 1 之間的均勻分布的隨機數組成的 5×5 矩陣。R =0.8147 0.0975 0.1576 0.1419 0.65570.9058 0.2785 0.9706 0.4218 0.03570.1270 0.5469 0.9572 0.9157 0.84910.9134 0.9575 0.4854 0.7922 0.93400.6324 0.9649 0.8003 0.9595 0.6787>> R = rand(5,3,'double') %生成double類型的5x3均勻分布的0到1間隨機數R =0.7577 0.7060 0.82350.7431 0.0318 0.69480.3922 0.2769 0.31710.6555 0.0462 0.95020.1712 0.0971 0.0344

(2):指定區(qū)域內的隨機數

? ? ?一般來說,可以使用公式?r = a + (b-a).*rand(N,1)?生成區(qū)間 (a,b) 內的?N?個隨機數。

>> r = -5 + (5+5)*rand(10,1) %生成一個由區(qū)間 (-5,5) 內均勻分布的數字組成的 10×1 列向量。r =-0.6126-1.18442.65522.9520-3.1313-0.1024-0.54411.46312.09362.5469

(3):隨機復數

>> a = rand + 1i*rand %生成一個實部和虛部位于區(qū)間 (0,1) 內的隨機復數。a =0.7513 + 0.2551i

2:randi(......)

 randi(N) 是生成(0,N]間均勻分布的偽隨機數,并且數都是整數,所以每個數是位于1到N之間。它的表達形式有以下幾種:

R = randi(iMax) ? ? ? ? ? ?% 生成1:iMax之間的均勻分布隨機數
R = randi(iMax,m,n) ? ? ? ?% 生成m×n的1:iMax之間的均勻分布隨機數
R = randi([iMin,iMax],m,n) % 生成m×n的iMin:iMax之間的均勻分布隨機數

例如:

R1 = randi(10,5,1); ? ? ?% 生成5×1的1:10之間隨機整數
R2 = randi([10,20],2,3); % 生成2×3的10:20之間隨機整數

3:randn(...)

有時候我們希望生成的隨機數是呈現正態(tài)分布的,而不是隨機分布,這時候我們就需要使用randn函數了。它生成的隨機數整體概率為正態(tài)分布,均值為0,方差為1。也就是說生成的數中出現0的概率最大,而越往無窮或者負無窮概率越小,但是出現的隨機數可能為所有實數,只不過出現的概率不同。它的格式如下:

R = randn(N) ? % 生成N×N個正態(tài)分布的隨機數
R = randn(M,N) % 生成M×N個正態(tài)分布的隨機數
例如:

R = randi(3); ? ? ?% 生成3×3的正態(tài)分布的隨機數

4:關于rand(‘state’,sum(clock))于rng用法的探究

首先需要知道Matlab中的rand()函數產生的是偽隨機數。如果我們知道偽隨機數的初始狀態(tài),那么產生的偽隨機數是唯一確定的。問題來了,Matlab每次啟動會重置rand()和randn()的初始狀態(tài)(重置為0),也就是說,你產生的隨機數會出現兩次隨機數一模一樣的情況,如:

>> rand('state',0) >> rand(3,1)ans =0.95010.23110.6068>> rand('state',1) >> rand(3,1)ans =0.95280.70410.9539>> rand('state',0) %隨機數結果復現了 >> rand(3,1)ans =0.95010.23110.6068

個人理解這樣做是為了使得隨機產生的結果重新復現方便多次展示,但是在matlab官網上面說最好不要用這種方法應為在2012以后的版本提供了更好的函數rng,如下圖:(強烈建議有什么問題還是去官網查手冊詳細,有各種例子,而且是官方解釋:https://ww2.mathworks.cn/help/matlab/ref/rand.html?searchHighlight=rand&s_tid=doc_srchtitle)

RandStream - 隨機數流

? ? MATLAB 中的偽隨機數來自一個或多個隨機數流。生成隨機數數組的最簡單方法是使用 rand、randn 或
? ? randi。這些函數全部都依賴于同一均勻隨機數流,稱為全局流。您可以創(chuàng)建與全局流分開使用的其他流,使用它們的 rand、randi 或? ? ? ? ? randn方法生成隨機數數組。您也可以創(chuàng)建隨機數流并將其用作全局流。

?

4、穩(wěn)定的重啟分布rng?
  這里我們來看一下如何讓每次程序運行生成的隨機數都一樣,主要借助的是rang函數,格式如下:

rng('default');
R = rand(1,5); % 每次程序運行生成恒定的1×5隨機數


此外還有生成同樣分布的表達方式:

s = rng;
R1 = rand(1,5);
rng(s);
R2 = rand(1,5); % R1和R2隨機數一樣

?

?

參考文章:

1:https://blog.csdn.net/linhd1102/article/details/51193812

2:https://ww2.mathworks.cn/help/matlab/ref/randi.html?searchHighlight=randi&s_tid=doc_srchtitle

3:https://blog.csdn.net/FX677588/article/details/72811673

《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。