سؤال

أحاول استخدام Boost::normal_distribution لإنشاء توزيع عادي بمتوسط ​​0 وsigma 1.

التعليمة البرمجية التالية لا تعمل لأن بعض القيم تتجاوز أو تتجاوز -1 و1 (ولا ينبغي أن تكون كذلك).هل يمكن لشخص ما أن يشير إلى ما أفعله بشكل خاطئ؟

#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.

شكرا لكم جميعا مقدما!

يحرر:هذا ما يحدث عندما يكون لديك مواعيد نهائية وتتجنب دراسة النظرية قبل القيام بالممارسة.

هل كانت مفيدة؟

المحلول

التعليمة البرمجية التالية لا تعمل لأن بعض القيم تتجاوز أو تتجاوز -1 و1 (ولا ينبغي أن تكون كذلك).هل يمكن لشخص ما أن يشير إلى ما أفعله بشكل خاطئ؟

لا، هذا سوء فهم للانحراف المعياري (المعلمة الثانية في المنشئ1) للتوزيع الطبيعي.

التوزيع الطبيعي هو منحنى الجرس المألوف.يخبرك هذا المنحنى بشكل فعال بتوزيع القيم.تكون القيم القريبة من مكان ذروة منحنى الجرس أكثر احتمالية من القيم البعيدة (ذيل التوزيع).

يخبرك الانحراف المعياري بمدى انتشار القيم.كلما كان الرقم أصغر، كلما كانت القيم أكثر تركيزًا حول المتوسط.كلما زاد العدد، قل تركيز القيم حول المتوسط.في الصورة أدناه ترى أن المنحنى الأحمر له تباين (التباين هو مربع الانحراف المعياري) قدره 0.2.قارن هذا بالمنحنى الأخضر الذي له نفس المتوسط ​​ولكن بتباين قدره 1.0.يمكنك أن ترى أن القيم الموجودة في المنحنى الأخضر أكثر انتشارًا مقارنة بالمنحنى الأحمر.يحتوي المنحنى الأرجواني على تباين 5.0 والقيم أكثر انتشارًا.

وهذا ما يفسر عدم حصر القيم [-1, 1].ومع ذلك، فمن المثير للاهتمام أن 68% من القيم تقع دائمًا ضمن انحراف معياري واحد عن المتوسط.لذا، كاختبار مثير للاهتمام لنفسك، اكتب برنامجًا لاستخلاص عدد كبير من القيم من التوزيع الطبيعي بمتوسط ​​0 وتباين 1 وحساب الأرقام التي تقع ضمن انحراف معياري واحد عن المتوسط.يجب أن تحصل على رقم قريب من 68% (68.2689492137% لكي تكون أكثر دقة).

alt text

1:من التعزيز توثيق:

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

يبني التوزيع الطبيعي مع المتوسط ​​والانحراف المعياري sd.

نصائح أخرى

أنت لا تفعل أي شيء خاطئ.للتوزيع الطبيعي ، تحدد Sigma الانحراف المعياري ، وليس النطاق.إذا قمت بإنشاء عينات كافية ، فسترى أن حوالي 68 ٪ منهم فقط يكمن في النطاق [يعني - Sigma ، Mean + Sigma] ، حوالي 95 ٪ في 2 سيغما ، وأكثر من 99 ٪ في 3 سيغما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top