隨機數生成

2021-02-20 Igor應用編程

在實驗數據處理中,經常會有這樣的情況:給定分布類型和參數,生成滿足該分布的隨機數值。如利用蒙特卡羅法估計測量數據的不確定時,就需要使用隨機數生成器來傳遞分布。本書中大量的例子都用到了示例數據,創建這些數據就利用了隨機數生成器。

Igor具有強大的統計分析功能,提供了大量函數和命令,用於分布計算、參數估計、假設檢驗、回歸分析等。其中僅偽隨機數生成器就有12種,可以生成滿足常見分布要求的隨機數,如二項分布隨機數、均勻分布隨機數、高斯分布隨機數、洛倫茲分布隨機數等。在生成隨機數時,可以通過設置隨機數生成種子,生成可重複的隨機數。

本小節主要介紹均勻分布隨機數和高斯分布隨機數生成函數。

1 均勻分布隨機數enoise


enoise(num,[RNG])生成一個滿足均勻分布的隨機數。隨機數分布範圍為[-num,num]。RNG為可選參數,指明enoise函數採用的算法,取1或者2,算法不同,生成的隨機數性能和周期有所差別。

enoise採用的隨機數種子由啟動igor時的系統時鐘值決定,因此生成的隨機數幾乎是完全「隨機」的。如果想要重複的隨機數,可以使用SetRandomSeed設置隨機數種子。

看下面的例子:

make/O/N=10000noisedata=enoise(1)

make/O/N=50 pdis

histogram/B=1 noisedata,pdis

integrate pdis

pdis/=pdis[49]

differentiate pdis

display pdis

ModifyGraph mode=1

結果如圖1所示:

                           

圖1 enoise函數生成隨機數分布

 

這裡,我們利用enoise函數生成了10000個隨機數,隨機數的範圍被限制到[-1,1]。為了驗證隨機數是否滿足均勻分布,利用Histogram直方統計命令統計隨機數出現的頻率,並且將統計結果放在pdis裡。Pdis長度為50,則histogram會自動將統計區間劃分為50個「箱子」,然後對落在每一個箱子裡的隨機數進行計數。此時pdis裡存放的是隨機數出現的頻率。Integrate命令將pdis轉化為累積頻率分布,然後再除以pdis[49]進行歸一化,此時pdis就是累積概率分布函數。再用different命令求取導數,即為概率密度分布函數,如圖1。

顯然,圖1所示概率密度分布函數值恆定,且大小等於0.5,與期望值(1/(1+1))吻合。

2 高斯分布隨機數生成

gnoise(num,[RNG])生成一個滿足高斯分布的隨機數。隨機數的標準偏差為num。可選參數RNG和enoise相同。高斯分布隨機數由均勻分布隨機數通過Box-Muller算法轉換而來,因此RNG含義完全相同。

下面看一個生成滿足高斯分布的隨機數例子。將上面代碼的enoise換成gnoise,其他的保持不變:

make/O/N=10000noisedata=enoise(1)

make/O/N=50 pdis

histogram/B=1 noisedata,pdis

integrate pdis

pdis/=pdis[49]

differentiate pdis

display pdis

ModifyGraph mode=1

CurveFit/M=2/W=0 gauss,pdis/D

結果如圖2所示:

圖2 滿足高斯分布的隨機數

最後一行利用curvefit命令對pdis進行擬合,擬合函數正是高斯函數。可以看到隨機數的分布函數滿足高斯分布。輸入下面的命令來查看該分布的標準偏差:

Print k3/sqrt(2)

結果為0.997279,與期望值1完全一致。

【本文節選自《Igor Pro使用教程》】

相關焦點

  • Excel隨機數生成方法,包括準確生成不重複和小數隨機數
    在 Excel 中,生成隨機數有兩個函數,分別為Rand函數和RandBetween函數,前者用於生成 0 到 1 之間的隨機數,後者用於生成指範圍的隨機數。它們生成的隨機數中都會產生重複值,如果要生成不重複的隨機數得用變通的方法,通常有兩種方法,一種為先生成種子再生成不重複的隨機數,另一種為用多個函數生成。
  • excel隨機數函數是什麼?excel怎樣生成隨機數?
    本篇將介紹excel隨機數函數是什麼?excel怎樣生成隨機數?有興趣的朋友可以了解一下!一、前言excel是我們工作中很常用的一款表格製作工具,它不僅僅只是用來製作表格,它還能對表格中的數據進行處理(比如:運算、排序、篩選等)。
  • 隨機生成N個立方體,學習blender Python隨機數生成
    打開blender控制臺首先輸入import random print(random.randint(0,9))多次執行print(random.randint(0,9)),就能見到系統每次都生成0-9內的隨機整數使用了
  • JavaScript用Math.random()生成隨機數
    基本概念顧名思義,Math.random()方法就是用於生成隨機數的,因為單詞random的意思正是「隨機的」。該方法生成的結果是 [0, 1) 範圍內的浮點數,注意這是一個左閉右開的區間,即該區間包含0而不包含1。官方文檔指出Math.random()方法生成的隨機數在該區間上要大致符合均勻分布。
  • 如何在單片機中生成隨機數
    隨機數在單片機的應用中也是很多的,當然產生隨機數的方法有很多,當中有一個就是利用單片機定時器或者預先寫好一個隨機數表,然後進行取數據。也是可以的。等等 今天給大家介紹另外一個在單片機中產生隨機數的方法。這裡介紹的方法是利用C語言中rand();函數來產生隨機數。 大家可以打開KeilC51HLP文件夾下的C51lib.chm文件索引「rand」,看一下該函數的解釋和使用方法。
  • 隨機數大家都會用,但是你知道生成隨機數的算法嗎?
    再不濟我們每周的抽獎都是用隨機數抽出來的,我們用隨機數的時候,往往都會加一個前綴,說它是偽隨機數,那麼這個偽隨機數的偽字該怎麼解釋,什麼又是真隨機數呢?真偽隨機數目前學界劃分真偽隨機數的方式非常簡單,一句話就能說明白,凡是用一定的算法使用程序生成的都是偽隨機數,通過物理現象產生的隨機數才是真隨機數。
  • Python 模塊學習:random 隨機數生成
    (點擊上方藍字,快速關注我們)來源:DarkBullblog.csdn.net/jgood/article/details/4278885如有好文章投稿,請點擊 → 這裡了解詳情Python中的random模塊用於生成隨機數
  • java生成隨機數的五種方法
    什麼情況下隨機數的生成線程不安全:線程1在第一次調用 random() 時產生一個生成器 generator1,使用當前時間作為種子。線程2在第一次調用 random() 時產生一個生成器 generator2,使用當前時間作為種子。
  • 簡要解析:Java中隨機數生成的代碼實現
    double rand = Math.random();        通過Random類的對象  程序可生成許多不同類型的隨機數字,做法很簡單,只需調用方法nextInt()和nextFloat()即可(也可以調用nextLong()或者nextDouble())。
  • python和scratch生成隨機不相同的十個數
    scratch生成10個隨機數很簡單,循環10次,循環裡面每次獲取一次1-10範圍內的一個隨機數。可以結果,出現了相同的數字,不符合我們的要求。第一種方法要解決這個問題,第一種方法,就是在加入前,先判斷這個列表裡面是否有這個數字,沒有就加入,直到裡面填滿10個數,因為不相同,所以也就是1-10範圍內的隨機且不同的10個數了。這裡新創建了一個temp的變量,為了判斷是否存在這個值,需要先將這個隨機值保存下來。
  • 如何使用javascript生成6位隨機數
    用最基本的js去寫,實現的效果是點擊獲取驗證碼碼按鈕,生成6位隨機數。首先新建一個測試網頁,裡面沒有什麼多餘的內容。在網頁中寫一個label  input框 一個按鈕。預覽一下效果。我們要實現的功能就是,點擊一下獲取驗證碼按鈕,生成6位隨機數寫入到input框中。在網頁中添加必要的script便籤。為按鈕添加單擊事件。
  • 隨機數本質,C語言的隨機數與隨機種子
    同時C語言也提供了一個標準庫裡面一個函數來產生隨機數,而對於隨機數的產生是根據種子(根據一個數值按照某種公式計算的)來變化的,種子 與隨機數之間符合正態分布(高斯分布)。@雲主宰蒼穹—正態分布生成隨機數在C語言中,我們一般使用 <stdlib.h> 頭文件中的 rand() 函數來生成隨機數,它的用法為
  • Excel快速生成不重複的1-N區間的隨機數
    Excel中產生隨機數的函數有兩個,Rand函數和Randbetween函數Rand函數使用Rand(1,20),產生的是1-20區間的隨機整數如果我們現在想要生成一串數字,它是某個區間不重複的數據例1、生成1-10區間的不重複數據
  • Excel生成隨機數的技巧,隨機數發生器,你用過嗎
    Excel獲取隨機數從概率分布中產生隨機樣本,其基本原理是隨機數的概念。隨機數是均勻分布在0和1之間的數。從技術上講,電腦不能產生真正的隨機數,因為它們必須使用一個可預測的算法。但是,設計用於產生一個數列的算法,似乎是隨機的。在 Excel中,我們可以使用函數RAND()在任何一個單元格之中產生隨機數。
  • excel如何生成0到任何數字之前的隨機數?隨機函數要活用~
    我們在使用excel時,有時候會需要生成一個0到任何數字之前的隨機數,那麼要如何生成呢?下面就來看看吧。一、我們打開一份空白測試表格。二、我們先從0-1開始, 默認實際上只能生成0-1範圍內的隨機數,單元格輸入公式=RAND()
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!題目python中生成隨機整數、隨機小數、0--1之間小數方法代碼先上代碼~運行效果題目詳述程序分析:
  • Excel隨機生成函數Rand函數技巧教學,按概率生成隨機數,趕緊Get
    今天跟大家分享一下Excel中隨機數生成的Rand函數。如果覺得幫幫真的幫到了您,分享分享朋友圈呀,親們^^<——非常重要!!!メ第三我們要生成整數就要完成四捨五入。輸入函數=ROUND(RAND()*50,0),0表示ROUND函數四捨五入最近整數。メ
  • 如何利用代碼生成一個隨機數?
    二、Random類Random,翻譯成中文就是「隨機的」的意思。顧名思義,也就是說通過這個類,可以獲取一個隨機數。Random是一個工具類,是Java已經存在的一個類,不需要我們自己再去建一個類,直接調用就可以了。步驟:①import導包(Random工具類)。②新建隨機數(Random)對象。
  • 如何用excel批量生成正態分布的隨機數?
    提到用rand函數批量生成隨機數,這是最簡單最快速的方法,但同時也有一個缺陷,就是rand函數生成的是均勻分布的隨機數,在區間範圍內會分布得比較均勻,不符合日常生活中數據的按照正態分布的特點,這樣也就留下了明顯的痕跡。比如我用rand函數生成0-100的100個隨機數,用Minitab自動生成直方圖,頻數是下面這樣的:大家可以看到,大致上每個區間分布的數據都比較均勻。
  • 隨機數生成及其在統計模擬中的應用
    下面關於隨機數生成的效率和後面的統計檢驗,都以生成224224個為基準,是1600多萬個,取這麼多,一方面為了比較程式語言實現的發生器產生隨機數的效率,另一方面是後面的遊程檢驗需要比較大的樣本量。Matlab內置的發生器及大部分的函數,底層實現都是C或者Fortran,MathWorks創始人Cleve B.