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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab线性同余发生器,线性同余法生成伪随机数

發布時間:2024/8/1 循环神经网络 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab线性同余发生器,线性同余法生成伪随机数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SICP中1.2.6素數檢驗一節中采用概率算法,通過隨機抽樣的方法利用費馬小定理測試來檢驗給出的整數是否為素數。這里需要用到隨機數生成的方法(random n),即:隨機返回0到n之間的任意整數,而我用的Calysto Scheme Kernel恰好沒有相應的隨機數生成方法的實現。之前有遇到Matlab進行隨機模擬的時候,由于沒有設定seed,導致運行了很久的程序一直在周期性地重復固定的“隨機數”,剛好借此機會研究一下隨機數生成的原理及方法。

計算機生成隨機數的方法一般是采用數學法,即根據某一(遞推)公式產生一個周期性足夠大的數列,滿足一定的均勻分布的特性,其優點在于可以迅速產生大量偽隨機數,缺點是所產生的并非真正的隨機數,只是近似隨機。不同的公式能夠產生性質不同的偽隨機數(列),一種簡單常用的方法稱為線性同余發生器(Linear Congruence Generator, LCG),其公式如下:

$$

\begin{cases}

X_0 = SEED, & \text{設定初始值}\\X_n = (A * X_{n-1} + B) (Mod M)\\ R_n = X_n/M

\end{cases}

$$

顯然LCG方法產生的隨機數列周期小于$M$,同時在保證周期盡量大的情況下,還需要適時地重設初始值,一般以系統時間作為“種子”設定初始值。Scheme的實現如下,假設將常量設定為 $A = 3, B = 0, M = 5$:

;; random.scm

(define SEED 1)

(define (seed i) (set! SEED i))

(define A 3)

(define B 0)

(define M 5)

(define (LCG)

(begin

(seed (remainder (+ (* A SEED) B) M))

SEED))

(define (random n)

(round (* (/ (LCG) (- M 1)) n) ))

將初始值設定為系統時間后,檢驗10次$[0, 100]$隨機數產生結果:

;; test your random

(define (test-rands n)

(if (= n 0)

(display "Done!")

(begin

(display (random 100))

(newline)

(test-rands (- n 1)))))

(seed (round (current-time)))

(test-rands 10)

;; 75

;; 100

;; 50

;; 25

;; 75

;; 100

;; 50

;; 25

;; 75

;; 100

;; Done!

可以發現,在$A = 3, B = 0, M = 5$的條件下,LCG產生的隨機數列周期僅為4,若要得到最大周期,需要滿足:

$B, M$互質;

$M$的所有質因數都能整除$A-1$;

若$M$是4的倍數,$A-1$也是;

$A,B,X_0$都比$M$小;

$A,B$是正整數。

參考

總結

以上是生活随笔為你收集整理的matlab线性同余发生器,线性同余法生成伪随机数的全部內容,希望文章能夠幫你解決所遇到的問題。

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