ما الذي يقوم به هذا المولّد
تُنتج هذه الأداة قائمة من الأعداد شبه العشوائية التي تتبع التوزيع اللوغاريتمي الطبيعي (Log-Normal). يكون المتغير العشوائي X لوغاريتميًا طبيعيًا عندما يتبع لوغاريتمه الطبيعي، أي \(\ln(X)\)، توزيعًا طبيعيًا. يبدأ المولّد بإنشاء قيم تتبع التوزيع الطبيعي القياسي باستخدام تحويل Box-Muller الكلاسيكي، ثم يقيسها لتطابق التوزيع الطبيعي المستهدف \(N(\mu, \sigma^2)\)، وأخيرًا يأخذ الدالة الأسية للحصول على قيم لوغاريتمية طبيعية موجبة تمامًا.
مهم: ماذا يعني كل من ميو وسيجما
المعاملان μ وσ يصفان التوزيع الطبيعي الكامن للمقدار \(\ln(X)\)، وهما ليسا المتوسط والانحراف المعياري للمتغير X نفسه. أما المتوسط الفعلي للمتغير X فهو \(\exp\!\left(\mu + \tfrac{1}{2}\sigma^{2}\right)\)، والوسيط هو \(\exp(\mu)\)، والتباين هو \(\left(e^{\sigma^{2}} - 1\right) e^{\,2\mu + \sigma^{2}}\). تُعرض هذه القيم المرجعية إلى جانب عيّنتك حتى تتمكن من التحقق من سلامة النتائج.
$$\begin{aligned} \text{Mean} &= \exp\!\left(\mu + \tfrac{1}{2}\sigma^{2}\right) \\ \text{Median} &= \exp\!\left(\mu\right) \\ \text{Var} &= \left(e^{\sigma^{2}} - 1\right) e^{\,2\mu + \sigma^{2}} \end{aligned}$$طريقة الاستخدام
أدخل قيمة μ (أي عدد حقيقي)، وقيمة σ (صفر أو قيمة موجبة)، وعدد الأعداد التي تريد توليدها (من 1 إلى 1000). ثم اختر عدد الأرقام المعنوية التي ترغب في عرضها. كل تشغيل يسحب أعدادًا عشوائية منتظمة جديدة، لذا تتغيّر القيم في كل مرة. وبما أن طريقة Box-Muller تنتج قيمتين طبيعيتين لكل زوج منتظم، فإن العدد الفردي يؤدي ببساطة إلى التخلص من قيمة فائضة واحدة.
شرح الصيغة الرياضية
بالنسبة لعددين منتظمين \(U_1\) و\(U_2\) ضمن المجال \((0,1]\): تعطي الصيغة
$$Z = \sqrt{-2\ln U_1}\,\cos(2\pi U_2)$$قيمة \(Z \sim N(0,1)\). ثم تكون \(Y = \mu + \sigma\, Z\) متبعةً للتوزيع \(N(\mu, \sigma^2)\)، وتكون \(X = \exp(Y)\) لوغاريتمية طبيعية.
$$X = \exp\!\left(\mu + \sigma\, Z\right), \quad Z = \sqrt{-2\ln U_1}\,\cos(2\pi U_2)$$ونتفادى الوقوع في \(\ln(0)\) بحصر \(U_1\) عند قيمة إبسيلون صغيرة جدًا.
مثال محلول
لنأخذ \(\mu = 1\) و\(\sigma = 2\)، مع \(U_1 = 0.5\) و\(U_2 = 0.25\). عندئذٍ \(R = \sqrt{-2\ln 0.5} = 1.17741\)، و\(Z_1 = R\cos(\pi/2) = 0\)، و\(Z_2 = R\sin(\pi/2) = 1.17741\). ومن ثَمّ \(X_1 = \exp(1) = 2.71828\) و\(X_2 = \exp(1 + 2\cdot 1.17741) = \exp(3.35482) \approx 28.64\). والقيمتان النظريتان المتوسط \(\exp(3) = 20.0855\) والوسيط \(\exp(1) = 2.71828\) متوافقتان مع النتائج.
الأسئلة الشائعة
لماذا تختلف القيم في كل تشغيل؟ لأنه مولّد عشوائي يعتمد على الدالة Math.random()؛ وبدون بذرة (seed) ثابتة، تختلف نتائج كل تشغيل.
ماذا يحدث إذا كانت سيجما = 0؟ يصبح التوزيع منحلًّا (degenerate) وتساوي كل قيمة \(\exp(\mu)\).
هل يمكن أن تكون القيمة سالبة؟ لا، فمجال التوزيع اللوغاريتمي الطبيعي هو \((0, \infty)\)، لذا تكون جميع المخرجات موجبة تمامًا.