2016-11-23 53 views
10

Sayısal simülasyonlar yaparken, julia'da normal sayıları kullandığımda verilerde bir şablon çizerken farkettim.Ne kadar ilişkilidir i.d.d. julia'da normal sayılar

Rasgele matrisler grubum var. Hesaplamalarımı tekrarlanabilir hale getirmek için, srand işlevini gerçekleştirmeye ayarlıyorum. Yani, randn(n,n) işlevini her kullanışımda srand(j) ile başlatıyorum, burada j gerçekleştirmenin numarasıdır.

o işi yapmak, ben yanlışlıkla korelasyonlar tanıtmak anlamına eğer Normal sayılar nasıl oluşturulduğunu öğrenmek ister ve

.

cevap

15

İdeal olarak, hiç de değil. Herhangi bir counterexamples varsa, lütfen onları Julia issue tracker'da hata olarak kaydedin. Julia, son teknoloji ürünü Mersenne Twister kütüphanesi olan dSFMT'u kullanıyor. Bu kütüphane çok hızlı ve sözde rasgele sayı üretimi için en iyi uygulamaları kullanmak için kabul edilmiştir. Bununla birlikte, son zamanlarda come to my attention numaralı telefonun genel olarak MT gibi PRNG'ler ile özellikle küçük, ardışık tohum değerlerinin kullanılmasıyla ilgili ince istatistiksel sorunlar olabileceği düşünülmektedir. Başka bir deyişle,

julia> using SHA 

julia> srand(reinterpret(UInt32,sha256(string(1)))) 
MersenneTwister(UInt32[0x73b2866b,0xe1fc34ff,0x4e806b9d,0x573f5aff,0xeaa4ad47,0x491d2fa2,0xdd521ec0,0x4b5b87b7],Base.dSFMT.DSFMT_state(Int32[660235548,1072895699,-1083634456,1073365654,-576407846,1073066249,1877594582,1072764549,-1511149919,1073191776 … -710638738,1073480641,-1040936331,1072742443,103117571,389938639,-499807753,414063872,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

julia> srand(reinterpret(UInt32,sha256(string(2)))) 
MersenneTwister(UInt32[0x3a5e73d4,0xee165e26,0x71593fe0,0x035d9b8b,0xd8079c01,0x901fc5b6,0x6e663ada,0x35ab13ec],Base.dSFMT.DSFMT_state(Int32[-1908998566,1072999344,-843508968,1073279250,-1560550261,1073676797,1247353488,1073400397,1888738837,1073180516 … -450365168,1073182597,1421589101,1073360711,670806122,388309585,890220451,386049800,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

SHA2-256 gibi güçlü şifreleme karmasının kullanarak küçük bir tamsayı tohum değerinin bir dize temsilini karma: Potansiyel korelasyon gerçekten endişeleniyorum iseniz bu hafifletmek için, böyle bir şey yapabileceğini ve Mersenne Twister durumunu tohumlamak için elde edilen hash verilerini kullanın. Ottoboni, Rivest & Stark, her bir rasgele sayı üretimi için güçlü bir şifreleme karması kullanılmasını önerir, ancak bu, büyük bir yavaşlama (mevcut donanım üzerinde) olacak ve muhtemelen istatistiksel rastlantısallığın eksikliğine gerçekten çok duyarlı bir uygulama olmadıkça aşırı derecede zorlanacaktır.

belki burada Julia'nın davranışları nedeniyle geriye uyumluluk konuları, varsayılan olarak çok kötü rastgele sayı üreteçleri kullanın bazıları diğer dillere, daha kötü olduğuna işaret olmalıdır. Bu çok yeni bir araştırma sonucudur (henüz yayınlanmamıştır). Önerdiğim teknik, bu konuyu diğer dillerde de azaltmak için kullanılabilir.

+0

, yeni sonuçlar henüz yayınlanmamıştır ve halka açık bir yerde yeni potansiyel yeni fikirler gönderme de endişeliyim çekiyor benim doktora yapıyorum çünkü beni, benim danışman ile cevap tartışalım. Gerekirse, sizinle kişisel olarak iletişim kurma şansı var mı? Buna ek olarak – user2820579

+3

, bu –

+1

Tabii, doğrudan benimle temas kurmaktan çekinmeyin üniforma sayılar normal değişebilirlerin bir Ziggurat algoritması (https://en.wikipedia.org/wiki/Ziggurat_algorithm) kullanır. – StefanKarpinski