(क्योंकि यह दृष्टिकोण पोस्ट किए गए अन्य समाधानों से स्वतंत्र है, जिनमें से एक मैंने पोस्ट किया है, मैं इसे एक अलग प्रतिक्रिया के रूप में पेश कर रहा हूं)।
आप सेकंड (या उससे कम) में सटीक वितरण की गणना कर सकते हैं बशर्ते कि पी का योग छोटा हो।
हमने पहले ही सुझाव देखे हैं कि वितरण लगभग गौसेन (कुछ परिदृश्यों के तहत) या पॉइज़न (अन्य परिदृश्यों के तहत) हो सकता है। किसी भी तरह से, हम जानते हैं कि इसका मतलब का योग है और इसका भिन्नता का योग है । इसलिए वितरण अपने मतलब के कुछ मानक विचलन के भीतर केंद्रित किया जाएगा, कहना के साथ एसडीएस 4 और 6 या आस के बीच। इसलिए हम केवल संभावना है कि राशि की गणना की जरूरत के बराबर होती है (एक पूर्णांक) के लिए के माध्यम से । जब अधिकांशपी मैं σ 2 पी मैं ( 1 - पी मैं ) जेड जेड एक्स कश्मीर कश्मीर = μ - जेड σ कश्मीर = μ + z σ पी मैं σ 2 μ कश्मीर [ μ - जेड √μpiσ2pi(1−pi)zzXkk=μ−zσk=μ+zσpiछोटे हैं, लगभग बराबर (लेकिन थोड़ा कम) , इसलिए रूढ़िवादी होने के लिए हम अंतराल में लिए गणना कर सकते हैं । उदाहरण के लिए, जब का योग बराबर होता है और पूंछों को अच्छी तरह से ढंकने के लिए को चुनना होता है, तो हमें में को कवर करने के लिए गणना की आवश्यकता होगी। = , जो सिर्फ 28 मान है।σ2μkपीमैं9जेड=6कश्मीर[9-6 √[μ−zμ−−√,μ+zμ−−√]pi9z=6k[०, २27][9−69–√,9+69–√][0,27]
वितरण की गणना पुनरावर्ती रूप से की जाती है । बता दें कि इन बर्नौली वेरिएबल्स के पहले के योग का वितरण है । माध्यम से से किसी भी के लिए, पहले चर का योग को दो परस्पर अनन्य तरीकों से बराबर कर सकता है: प्रथम चर का योग और बराबर है। वरना पहले का योग चर के बराबर होती है और है । इसलिये मैं जे 0 मैं + 1 मैं + 1 जे मैं जे मैं + 1 सेंट 0 मैं j - 1 मैं + 1 सेंट 1fiij0i+1i+1jiji+1st0ij−1i+1st1
fi+1(j)=fi(j)(1−pi+1)+fi(j−1)pi+1.
हमें केवल इस संगणना को इंटीग्रल के लिए अंतराल में सेअधिकतम ( 0 , μ - जेड √j μ+z √max(0,μ−zμ−−√) μ+zμ−−√.
जब अधिकांश छोटे होते हैं (लेकिन अभी भी उचित परिशुद्धता के साथ से भिन्न होते हैं ), यह दृष्टिकोण फ्लोटिंग पॉइंट राउंडऑफ़ त्रुटियों के विशाल संचय से ग्रस्त नहीं है जिसका उपयोग मैंने पहले किए गए समाधान में किया था। इसलिए, विस्तारित-सटीक संगणना की आवश्यकता नहीं है। उदाहरण के लिए, संभावनाओं के लिए एक दोहरी सटीकता की गणना ( , और बीच राशि की संभावनाओं के लिए गणना की आवश्यकता होती है 1 - p i 1 2 16 p i = 1 / ( i + 1 ) μ = 10.6676 0 31 3 × 10 - 15 z = 6 3.6 × 10 - 8pi1−pi1216pi=1/(i+1)μ=10.6676031) ने गणितज्ञ 8 के साथ 0.1 सेकंड और एक्सेल 2002 के साथ 1-2 सेकंड (दोनों एक ही उत्तर प्राप्त किए)। चौगुनी सटीकता के साथ इसे दोहराते हुए (गणितज्ञ में) लगभग 2 सेकंड लगे लेकिन से अधिक किसी भी उत्तर को नहीं बदला । कुल पूंछ में SDs पर वितरण को समाप्त करने से कुल संभावना का केवल खो गया ।3×10−15z=63.6×10−8
0 और 0.001 ( ) के बीच 40,000 दोहरे परिशुद्धता यादृच्छिक मानों की एक सरणी के लिए एक और गणना ने गणितज्ञ के साथ 0.08 सेकंड का समय लिया।μ=19.9093
यह एल्गोरिथ्म समानांतर है। बस के सेट को लगभग बराबर आकार के एक सबसेट के में तोड़ दें । प्रत्येक उपसमुच्चय के लिए वितरण की गणना करें, फिर पूर्ण उत्तर प्राप्त करने के लिए परिणाम (यदि आप चाहें तो एफएफटी का उपयोग करके) को हल करें। यह तब भी उपयोग करने के लिए व्यावहारिक बनाता है जब बड़े हो जाते हैं, जब आपको पूंछ ( बड़े) में बहुत दूर देखने की जरूरत होती है , और / या बड़ा होता है। μ z npiμzn
प्रोसेसर की सरणी के लिए प्रोसेसर के साथ चर का समय । मैथमेटिका की गति एक मिलियन प्रति सेकंड के क्रम पर है। उदाहरण के लिए, प्रोसेसर, वैरिएंट, की कुल संभावना , और ऊपरी पूंछ में मानक विचलन के लिए बाहर जाना , मिलियन: कंप्यूटिंग समय के एक जोड़े सेकंड आंकड़ा। यदि आप इसे संकलित करते हैं, तो आप परिमाण के दो क्रमों को तेज़ कर सकते हैं।एम ओ ( n ( μ + z √nmमीटर=1n=20000μ=100जेड=6n(μ+z √O(n(μ+zμ−−√)/m)m=1n=20000μ=100z=6n(μ+zμ−−√)/m=3.2
संयोग से, इन परीक्षण मामलों में, वितरण के रेखांकन ने स्पष्ट रूप से कुछ सकारात्मक तिरस्कार दिखाया: वे सामान्य नहीं हैं।
रिकॉर्ड के लिए, यहाँ एक गणितीय समाधान है:
pb[p_, z_] := Module[
{\[Mu] = Total[p]},
Fold[#1 - #2 Differences[Prepend[#1, 0]] &,
Prepend[ConstantArray[0, Ceiling[\[Mu] + Sqrt[\[Mu]] z]], 1], p]
]
( एनबी इस साइट द्वारा लागू किया गया रंग कोडिंग मैथेमेटिका कोड के लिए अर्थहीन है। विशेष रूप से, ग्रे सामग्री टिप्पणी नहीं है : यह वह जगह है जहां सभी काम किया जाता है!)
इसके उपयोग का एक उदाहरण है
pb[RandomReal[{0, 0.001}, 40000], 8]
संपादित करें
इस परीक्षण के मामले में गणितज्ञR
की तुलना में एक समाधान दस गुना धीमा है - शायद मैंने इसे बेहतर तरीके से कोडित नहीं किया है - लेकिन यह अभी भी जल्दी से निष्पादित होता है (लगभग एक सेकंड):
pb <- function(p, z) {
mu <- sum(p)
x <- c(1, rep(0, ceiling(mu + sqrt(mu) * z)))
f <- function(v) {x <<- x - v * diff(c(0, x));}
sapply(p, f); x
}
y <- pb(runif(40000, 0, 0.001), 8)
plot(y)