2010-01-16 19 views
23

मैं आदेश मतलब 0 और सिग्मा 1.बूस्ट सामान्य वितरण कक्षाओं का उपयोग कैसे करें?

के रूप में कुछ मूल्यों पर या -1 और 1 से परे हैं निम्नलिखित कोड काम नहीं करता है (और साथ एक सामान्य वितरण उत्पन्न करने के लिए बढ़ावा :: normal_distribution उपयोग करने के लिए कोशिश कर रहा हूँ नहीं होना चाहिए)। क्या कोई यह नहीं बता सकता कि मैं क्या गलत कर रहा हूं?

#include <boost/random.hpp> 
#include <boost/random/normal_distribution.hpp> 

int main() 
{ 
    boost::mt19937 rng; // I don't seed it on purpouse (it's not relevant) 

    boost::normal_distribution<> nd(0.0, 1.0); 

    boost::variate_generator<boost::mt19937&, 
          boost::normal_distribution<> > var_nor(rng, nd); 

    int i = 0; for (; i < 10; ++i) 
    { 
    double d = var_nor(); 
    std::cout << d << std::endl; 
    } 
} 

परिणाम मेरी मशीन पर है:

0.213436 
-0.49558 
1.57538 
-1.0592 
1.83927 
1.88577 
0.604675 
-0.365983 
-0.578264 
-0.634376 

आप सभी मूल्यों -1 और 1.

आप सभी पहले से धन्यवाद के बीच नहीं हैं देख सकते हैं!

EDIT: यह तब होता है जब आपके पास समय सीमा होती है और अभ्यास करने से पहले सिद्धांत का अध्ययन करने से बचती है।

+7

मैंने अपने सभी आंकड़ों को भूल लिया है, लेकिन भिन्नता (जो वितरण के ctor का दूसरा पैरामीटर है) निश्चित रूप से एक सीमा के लिए एक पूर्ण कटऑफ निर्दिष्ट नहीं करता है? यह एक उपाय है कि चीजें कैसे फैलती हैं। –

+0

@ नील बटरवर्थ: कन्स्ट्रक्टर में दूसरा पैरामीटर मानक विचलन (भिन्नता का वर्ग रूट) है। – jason

+0

ठीक है, मैंने कहा था कि मैं लगभग सब कुछ भूल गया था! –

उत्तर

29

निम्न कोड काम नहीं करता है क्योंकि कुछ मान -1 और 1 (और नहीं होना चाहिए) के बराबर हैं। क्या कोई यह नहीं बता सकता कि मैं क्या गलत कर रहा हूं?

नहीं, यह मानक विचलन के एक गलतफहमी सामान्य वितरण की (निर्माता में दूसरा पैरामीटर) है।

सामान्य वितरण परिचित घंटी वक्र है। वह वक्र प्रभावी ढंग से आपको मूल्यों का वितरण बताता है। घंटी वक्र चोटियों के करीब के मूल्य कहीं दूर मूल्यों (वितरण की पूंछ) की तुलना में अधिक संभावना है।

मानक विचलन आपको बताता है कि मूल्य कैसे फैलते हैं। संख्या जितनी छोटी होगी, उतना अधिक केंद्रित मूल्य माध्य के आसपास होंगे। संख्या जितनी बड़ी होगी, कम केंद्रित मूल्य माध्य के आसपास होंगे। नीचे दी गई छवि में आप देखते हैं कि लाल वक्र में भिन्नता है (भिन्नता मानक विचलन का वर्ग है) 0.2। इसकी तुलना हरे रंग की वक्र से करें जिसका अर्थ समान है लेकिन 1.0 का एक भिन्नता है। आप देख सकते हैं कि हरे वक्र में मान लाल वक्र के सापेक्ष फैल गए हैं। बैंगनी वक्र में भिन्नता 5.0 है और मान भी अधिक फैल गए हैं।

तो, यह बताता है कि मान [-1, 1] तक क्यों सीमित नहीं हैं। हालांकि, यह एक दिलचस्प तथ्य है कि 68% मान हमेशा माध्य के एक मानक विचलन के भीतर होते हैं। इसलिए, अपने लिए एक दिलचस्प परीक्षण के रूप में एक सामान्य वितरण से मूल्य 0 और भिन्नता 1 के साथ बड़ी संख्या में मूल्यों को आकर्षित करने के लिए एक प्रोग्राम लिखें और उस संख्या को गिनें जो औसत के एक मानक विचलन के भीतर है। आपको 68% के करीब एक संख्या मिलनी चाहिए (68.268 9 4 9 2137% थोड़ा और सटीक होना)।

alt text

: बढ़ावा documentation से:

normal_distribution(RealType mean = 0, RealType sd = 1);

साथ एक सामान्य वितरण निर्माणों मतलब है और मानक विचलन एसडी मतलब।

8

आप कुछ भी गलत नहीं कर रहे हैं। सामान्य वितरण के लिए, सिग्मा मानक विचलन निर्दिष्ट करता है, न कि सीमा। यदि आप पर्याप्त नमूने उत्पन्न करते हैं, तो आप देखेंगे कि केवल उनमें से 68% रेंज [माध्य - सिग्मा, माध्य + सिग्मा], लगभग 2% सिग्मा, और 99% से अधिक 3 सिग्मा के भीतर हैं।

संबंधित मुद्दे