王鵬 董平軒 冉玉梅
關(guān)鍵詞:概率論與數(shù)理統(tǒng)計;隨機數(shù);Matlab;輔助教學(xué);函數(shù)
中圖分類號:TP311 文獻標(biāo)識碼:A
文章編號:1009-3044(2023)02-0138-03
1 引言
眾所周知,自然界發(fā)生的現(xiàn)象可分為兩類。一類現(xiàn)象在一定條件下發(fā)生的結(jié)果是完全可以預(yù)知的,稱為必然現(xiàn)象。另一類現(xiàn)象發(fā)生的結(jié)果事先是無法準(zhǔn)確預(yù)知的,稱為隨機現(xiàn)象?!陡怕收撆c數(shù)理統(tǒng)計》正是講述隨機現(xiàn)象統(tǒng)計規(guī)律的課程[1],但是在教學(xué)過程中,我們發(fā)現(xiàn)純粹的概念表述和公式推導(dǎo)不利于學(xué)生對隨機現(xiàn)象的理解,而且計算過程相當(dāng)繁瑣,計算結(jié)果也不直觀,而引入Matlab作為教學(xué)輔助工具則正好能彌補傳統(tǒng)教學(xué)方式的缺點,能取得更好的教學(xué)效果。但是在使用Matlab輔助《概率論與數(shù)理統(tǒng)計》教學(xué)過程中面臨的一個首要問題就是要生成一個隨機數(shù),因此有必要對隨機數(shù)的Matlab實現(xiàn)專門進行系統(tǒng)研究。
2 Matlab簡介
Matlab是當(dāng)今國際很流行的科學(xué)計算軟件,Mat?lab語言是當(dāng)今國際上最流行的科學(xué)與工程計算編程語言[2]。信息技術(shù)、計算機技術(shù)發(fā)展到今天,科學(xué)計算在各個領(lǐng)域得到了廣泛的應(yīng)用。在諸多方面例如控制論、系統(tǒng)仿真、數(shù)學(xué)計算等問題,如果自己去編寫程序,不僅會消耗大量的時間,而且往往質(zhì)量不高。Matlab作為一個專業(yè)的數(shù)值計算軟件,提供了大量的運算函數(shù),可以方便地進行各種復(fù)雜的數(shù)學(xué)計算,而且效率極高,同時具有可視化、編程、GUI和編輯等功能[3],因此極為適宜在《概率論和數(shù)理統(tǒng)計》教學(xué)中作為輔助工具,它不僅可以快速地調(diào)用函數(shù)進行概率和統(tǒng)計計算,同時也可以將結(jié)果可視化、直觀化,極大地促進學(xué)生對課程知識的學(xué)習(xí)和理解。
3 Matlab 中的基本隨機數(shù)生成函數(shù)
Matlab提供了2個基本的生成偽隨機數(shù)的函數(shù)rand 和randn[4],其中rand函數(shù)用來生成[0,1]上均勻分布隨機數(shù),randn函數(shù)用來生成標(biāo)準(zhǔn)正態(tài)分布隨機數(shù)。由[0,1]上均勻分布隨機數(shù)可以生成其他分布的隨機數(shù),由標(biāo)準(zhǔn)正態(tài)分布隨機數(shù)可以生成一般正態(tài)分布隨機數(shù)。在不指明分布的情況下,通常所說的隨機數(shù)是指[0,1]上均勻分布的隨機數(shù)。在不同版本的Matlab 中,rand函數(shù)有幾種通用的調(diào)用格式,如下表所示:
其中,輸入?yún)?shù)應(yīng)為正整數(shù),若輸入負(fù)整數(shù),則被視為0,此時輸出一個空矩陣。
下例調(diào)用rand函數(shù)生成一個4?4的隨機數(shù)矩陣和一個1?10的隨機數(shù)矩陣,然后再調(diào)用hist函數(shù)畫出對應(yīng)的頻數(shù)直方圖。
>> x=rand(4)
x =
0.1869 0.7094 0.6551 0.9597
0.4898 0.7547 0.1626 0.3404
0.4456 0.2760 0.1190 0.5853
0.6463 0.6797 0.4984 0.2238
>> y=x(:);
>> x=rand(1,10)
x =
0.1068 0.6538 0.4942 0.7791 0.7150
0.9037 0.8909 0.3342 0.6987 0.1978
>> hist(x)
下例調(diào)用randn函數(shù)生成一個標(biāo)準(zhǔn)正態(tài)分布N(0,1)的1行10列矩陣。
>> x=randn(1,10)
x =
0.0799 -0.9485 0.4115 0.6770 0.8577-0.6912 0.4494 0.1006 0.8261 0.5362
除了以上兩個基本隨機數(shù)函數(shù)之外,還可以調(diào)用randperm(N)函數(shù),它可以生成一個1,2,...,N的一個隨機排列。如下例所示:
>> randperm(6)
ans=
1 4 3 6 2 5
>> randperm(6)
ans=
5 6 4 1 3 2
>> randperm(6)
ans=
2 4 3 6 1 5
rand函數(shù)還可以用以下兩種方式調(diào)用:
1) rand(method,s)
用method確定的隨機數(shù)生成器生成隨機數(shù),此時用s的值初始化隨機數(shù)生成器的狀態(tài)。其中輸入?yún)?shù)method用來指定隨機數(shù)生成器所采用的算法,method 是字符串變量,它的可能取值如下表所示:
參數(shù)s可以理解為生成隨機數(shù)序列的初始種子,它的值依賴于所選擇的method參數(shù),如果method設(shè)定為state或者twister,則s的值必須是一個0到232-1 之間的整數(shù)或者rand的輸出。若method設(shè)定為seed,則s 必須是一個0 到231-2 之間的整數(shù)或者rand 的輸出。
2)S=rand(method)
它返回method指定的隨機數(shù)生成器的當(dāng)前內(nèi)部狀態(tài),并不改變所用的生成器。
需要注意的是,隨機數(shù)生成器算法及初始狀態(tài)共同決定了所產(chǎn)生的隨機數(shù)序列,同樣的隨機數(shù)生成器算法設(shè)置為相同的初始狀態(tài),則生成相同的隨機數(shù)。否則會生成不同的隨機數(shù),而Matlab每次啟動時,都會重置rand函數(shù)的狀態(tài),所以在改變輸入狀態(tài)值之前,每次與Matlab的會話中rand函數(shù)都會生成相同的隨機數(shù)序列。所以,實際上這個函數(shù)生成的是偽隨機數(shù)[5],其生成機制由隨機種子控制。如下例所示:
>> rand‘( twister,3);