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