मैं एक C ++ फ़ंक्शन लिखने की कोशिश कर रहा हूं जो गौसियन यादृच्छिक मूल्यों को लौटाएगा, उनके साधन और संस्करण दिए जाएंगे।
एक लाइब्रेरी फंक्शन है rand()
, जो 0
और के बीच यादृच्छिक संख्या देता है RAND_MAX
। RAND_MAX
इसका कोई निश्चित मान नहीं है, लेकिन यह गारंटी है कि यह कम से कम । इसकी पीडीएफ एकसमान है।
मैं इसे rand()
एक गाऊसी चर में बदलने के लिए सेंट्रल लिमिट प्रमेय का उपयोग कर रहा हूं । मैं जो कुछ कर रहा हूं वह rand()
एक उपयोगकर्ता द्वारा निर्दिष्ट समय के लिए कॉल करने के लिए है, फिर उनके रिटर्न मूल्यों को जोड़ें, फिर उपयोगकर्ता को निर्दिष्ट निर्दिष्ट साधन पर स्थानांतरित करें।
ऊपर प्लॉटिंग में, मैंने अपने गौसियन यादृच्छिक जनरेटर को बार कहा, और इसके रिटर्न मानों की आवृत्तियों को प्लॉट किया। जैसा कि आप देखते हैं, इसका विचरण बहुत बड़ा है, क्योंकि यह बहुत सारे अन्य यादृच्छिक मूल्यों के योग से बनाया गया है।
यह गॉसियन पीडीएफ और निर्दिष्ट माध्य मान के साथ एक गाऊसी चर को सफलतापूर्वक लौटाता है। हालाँकि, समस्या इसकी भिन्नता है। मैं इस बिंदु पर अटका हुआ हूं, क्योंकि मुझे नहीं पता कि उपयोगकर्ता के निर्दिष्ट मूल्य के लिए इसके संस्करण को कैसे बदलना है।
यह मेरा कोड है (अब के लिए अधूरा; पैरामीटर "वेरिएंस" को अनदेखा किया गया है):
template <class T>
T Random::GetGaussian(T Mean /*= 0*/, T Variance /*= 1*/)
{
T MeanOfSum = NUM_GAUSSIAN_SUMS / static_cast<T>(2);
T Rand = 0;
for (uint64_t i=0; i<NUM_GAUSSIAN_SUMS; i++)
{
Rand += static_cast<T>(rand()) / RAND_MAX;
}
return Rand - (MeanOfSum - Mean);
}
मान लें कि NUM_GAUSSIAN_SUMS
100 है, और RAND_MAX
32767 है।
मैं फंक्शन के पैरामीटर के अनुसार रैंडम वेरिएबल के वेरिएशन को बदलना चाहता हूं। मेरा सवाल है, मैं इस यादृच्छिक चर के विचरण को कैसे बदल सकता हूं? मैं यह कैसे कर सकता हूं?