मुझे बिनोमियल (एन, पी) वितरण से यादृच्छिक संख्याएं उत्पन्न करने की आवश्यकता है।सी #: द्विपदीय वितरण से संख्याएं उत्पन्न करने के लिए संख्यात्मक एल्गोरिदम
ए बिनोमियल (एन, पी) यादृच्छिक चर एन वर्दी चर के योग है जो संभाव्यता पी के साथ 1 लेता है। छद्म कोड में, x=0; for(i=0; i<n; ++i) x+=(rand()<p?1:0);
एक द्विपक्षीय (एन, पी) उत्पन्न करेगा।
मुझे इसे छोटे और साथ ही वास्तव में बड़े एन के लिए उत्पन्न करने की आवश्यकता है, उदाहरण के लिए n = 10^6 और p = 0.02। क्या इसे उत्पन्न करने के लिए कोई तेज संख्यात्मक एल्गोरिदम है?
संपादित करें -
public long Binomial(long n, double p) {
// As of now it is an approximation
if (n < 1000) {
long result = 0;
for (int i=0; i<n; ++i)
if (random.NextDouble() < p) result++;
return result;
}
if (n * p < 10) return Poisson(n * p);
else if (n * (1 - p) < 10) return n - Poisson(n * p);
else {
long v = (long)(0.5 + nextNormal(n * p, Math.Sqrt(n * p * (1 - p))));
if (v < 0) v = 0;
else if (v > n) v = n;
return v;
}
}
क्या पोइसन वितरण 'n * p <10' या' n * (1 - p) <10' के लिए अच्छा काम करता है? आप कैसे वितरण चुनते हैं? – HelloGoodbye
हां, बड़े एन के लिए। द्विपदीय (एन, लैम्ब्डा/एन) पोइसन (लैम्ब्डा) में परिवर्तित होता है, क्योंकि एन अनंत तक जाता है। – KalEl