如何用matlab生成隨機數函式

2022-07-30 10:00:10 字數 2872 閱讀 4129

1. matlab 函式 rand

產生在區間 (0, 1)的均勻隨機數,它是平均分布在 (0,1)之間。乙個稱為seed的值則是用來控制產生隨機數的次數。均勻隨機數函式的語法為rand(n),rand(m,n),其結果分別產生一矩陣含n×n個隨機數和一矩陣含m×n的隨機數。注意每次產生隨機數的值都不會一樣,這些值代表的是隨機且不可預期的,這正是我們用隨機數的目的。我們可利用這些隨機數代入算式中,來表示某段訊號的不規則振幅或是某個事件出現的機率。均勻隨機數其值平均的分布於一區間的特性可以從其統計密度函式(probabilitydensity function, pdf)說明。從其pdf分布類似長條圖的分布,可以看出其每乙個隨機數值出現的機率皆相同,所以它被稱為均勻隨機數。

見以下的例子:

>> rand(1,6) % 第一次使用隨機數產生器

ans =

0.2190 0.0470 0.6789 0.6793 0.9347 0.3835

>>hist(ans) % 看看長條圖的長相

>>plot(ans) % 比較上個圖與這個圖有何差異?何者能代表不規則資料的分布

>> rand(1,6) % 第二次使用隨機數產生器,注意每次產生的隨機數值皆不同

ans =

0.5194 0.8310 0.0346 0.0535 0.5297 0.6711

因為每次隨機數產生的值皆不同,如果因為驗證算式需要確定所使用的隨機數值是相同的,可以利用seed這個選項,用以設定使用計算隨機數產生器的起始值,其語法為rand('seed',n),n的規定是。其中n=0有特別意義是使用第一次產生隨機數值的起始值(=931316785),其它的n值即是所使用起始值。如果使用相同的起始值,則隨機數值會一樣,因為隨機數的計算是依據起始值。請看以下的例子:

>> rand('seed',0) % 將隨機數值的起始值重設,相當於是第一次產生隨機數值

>>rand('seed') % 顯示現在使用的 seed 值=931316785

ans =

931316785

>> rand(2,3) % 注意隨機數值的上下限介於 [0,1] 區間

ans =

0.2190 0.6789 0.9347

0.0470 0.6793 0.3835

>> rand('seed') % 顯示再產生隨機數值所用的seed=412659990

ans =

412659990

>> rand('seed',0)

>> rand(1,6)

ans =

0.2190 0.0470 0.6789 0.6793 0.9347 0.3835

>> rand('seed',100) % 設定隨機數值的起始值=100

>> rand('seed')

ans =

100>> rand(2,5)

ans =

0.2909 0.0395 0.3671 0.5968 0.9253

0.0484 0.5046 0.9235 0.8085 0.3628

如果需要產生隨機數值不是介於[0,1]區間,可以採用以下步驟將隨機數值從[0,1]區間轉換到其它區間。假設要得到一組隨機數值是介於[2,4]區間,我們先產生一組隨機數介於[0,1]區間 ,再將其值乘以2,因為2等於區間上下限的差值(4-2)。接著再加上下限值(2),即可得到隨機數值是介於[2,4]區間。例如區間為[a,b],a為下限值,b為上限值。則算式如下

x=(b-a)*r + a,

其中x代表轉換後的隨機數值的陣列。請看下列示範:

>>data_1 = 2*rand(1,500)+2; %原隨機數值有500個

>>plot(data_1) %這個圖是否看來眼熟?

>>axis([1 500 0 6]) %調整橫軸/縱軸上下限

>>hist(data_1) %看看其長條圖

2. matlab 函式randn

產生常態隨機數,它是以高斯分布在隨機數出現的上下限區間。常態隨機數其值分布於一區間的特性可以從其統計密度函式(pdf)說明。從其 pdf分布可以看出其每乙個隨機數值出現的機率皆不相同,靠近中間的隨機數值出現的機率比起兩端的值要高,這是一般不規則現象較可能出現的情形,所以它被稱為常態隨機數。由於常態隨機數並非以上下限來定義,它是用資料的平均值和方差定義之。因此在產生一常態隨機數時,需設定平均值和方差的大小。randn(n)和randn(n,m)是分別產生一矩陣含n×n個隨機數和一矩陣含m×n的常態隨機數,其平均值為0方差為1。

見以下的例子:

>> x=-2.9:0.2:2.9; % 這個例子用到 hist 函式來畫出二種隨機數的分布圖

>> y=randn(1,5000);

>> hist(y,x)

>> title('histogram of normal random data')

>> y1=rand(1,5000);

>> hist(y1,x)

>> title('histogram of uniform random data')

如果需要產生常態隨機數值的平均值和方差並非0和1,可以採用以下步驟將平均值和方差做轉換。假設要得到一組常態隨機數值的平均值為b和方差為a,我們先產生一組隨機數r,再將其值乘以方差a。接著再加平均值b。算式如下:

x=a*r + b

其中x代表轉換後的隨機數值的陣列。請看下列示範:

>>data_2 = randn(1,500)+3 %原隨機數值有500個

>>plot(data_2) %這個圖是否看來眼熟?

>>axis([1 500 0 6])

>>hist(data_2) %看看其長條圖

3.randperm(n)

產生乙個1到n之間自然數的隨機排列

4.randint(m,n,[1 n])

生成m×n的在1到n之間的隨機整數矩陣,其效果與randint(m,n,n+1)相同。

matlab生成隨機數函式

1.matlab 函式rand 產生在區間 0,1 的均勻隨機數,它是平均分布在 0,1 之間。乙個稱為 seed 的值則是用來控制產生隨機數的次數。均勻隨機數函式的語法為 rand n rand m,n 其結果分別產生一矩陣含n n個隨機數和一矩陣含m n的隨機數。注意每次產生隨機數的值都不會一樣...

matlab隨機數的生成

參考 函式含義例項 特例randi 均勻分布的偽隨機整數 i表示integer randi統一左值為1,且可以取到右端點 s1 randi 5,3,3 注 矩陣的尺寸是3 3 元素服從 1,5 的均勻分布 s2 randi 5,6,6,3 注 生成三個矩陣,每個矩陣的尺寸是6 6 元素服從 1,5 ...

如何用C 生成不重複的隨機數

我們在做能自動生成試卷的考試系統時,常常需要隨機生成一組不重複的題目,在.net framework中提供了乙個專門用來產生隨機數的類system.random。對於隨機數,大家都知道,計算機不 可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的演算法對事先選定的隨機種子做複雜的運算,用產生的...