طريقة مارساجليا القطبية

طريقة مارساجليا القطبية [ 1 ] هي طريقة أخذ عينات الأرقام شبه العشوائية لتوليد زوج من المتغيرات العشوائية الطبيعية القياسية المستقلة . [ 2 ]

تُستخدم المتغيرات العشوائية الطبيعية القياسية بشكل متكرر في علوم الحاسوب ، والإحصاءات الحسابية ، وعلى وجه الخصوص، في تطبيقات طريقة مونت كارلو .

تعتمد الطريقة القطبية على اختيار نقاط عشوائية ( س ، ص ) في المربع −1 < س < 1 ، −1 < ص < 1 حتى         

0<s=x2+y2<1،{\displaystyle 0<s=x^{2}+y^{2}<1,\,}

ثم إرجاع الزوج المطلوب من المتغيرات العشوائية الطبيعية كـ

x-2ln(s)s،  y-2ln(s)s،{\displaystyle x{\sqrt {\frac {-2\ln(s)}{s}}}\,,\ \ y{\sqrt {\frac {-2\ln(s)}{s}}},}

أو، على نحو مماثل،

xs-2ln(s)،  ys-2ln(s)،{\displaystyle {\frac {x}{\sqrt {s}}}{\sqrt {-2\ln(s)}}\,,\ \ {\frac {y}{\sqrt {s}}}{\sqrt {-2\ln(s)}},}

أينx/s{\displaystyle x/{\sqrt {s}}}وy/s{\displaystyle y/{\sqrt {s}}}يمثل جيب التمام وجيب الزاوية التي يصنعها المتجه ( x , y ) مع المحور x .

الأساس النظري

يمكن تلخيص النظرية الأساسية على النحو التالي:

إذا كان المتغير u موزعًا توزيعًا منتظمًا في الفترة 0  u < 1، فإن النقطة (cos(2π u ), sin(2π u )) موزعة توزيعًا منتظمًا على محيط الدائرة + = 1، وبضرب تلك النقطة بمتغير عشوائي مستقل ρ يكون توزيعه        

برو(ρ<أ)=0أرهـ-ر2/2در{\displaystyle \Pr(\rho <a)=\int _{0}^{a}re^{-r^{2}/2}\,dr}

سينتج عنه نقطة

(ρكوس(2πu)،ρالخطيئة(2πu)){\displaystyle \left(\rho \cos(2\pi u),\rho \sin(2\pi u)\right)}

والتي يتم توزيع إحداثياتها بشكل مشترك كمتغيرين عشوائيين طبيعيين قياسيين مستقلين.

تاريخ

تعود هذه الفكرة إلى لابلاس ، الذي ينسب إليه غاوس الفضل في اكتشاف ما سبق ذكره.

أنا=-هـ-x2/2دx{\displaystyle I=\int _{-\infty }^{\infty }e^{-x^{2}/2}\,dx}

بأخذ الجذر التربيعي لـ

أنا2=--هـ-(x2+y2)/2دxدy=02π0رهـ-ر2/2دردθ.{\displaystyle I^{2}=\int _{-\infty }^{\infty }\int _{-\infty }^{\infty }e^{-(x^{2}+y^{2})/2}\,dx\,dy=\int _{0}^{2\pi }\int _{0}^{\infty }re^{-r^{2}/2}\,dr\,d\theta .}

يُظهر التحويل إلى الإحداثيات القطبية أن θ موزعة بانتظام (بكثافة ثابتة) من 0 إلى 2π، وأن المسافة القطرية r لها كثافة

رهـ-ر2/2.{\displaystyle re^{-r^{2}/2}.\,}

( r 2 له توزيع مربع كاي المناسب .)

تُسمى هذه الطريقة لإنتاج زوج من المتغيرات الطبيعية المعيارية المستقلة عن طريق إسقاط نقطة عشوائية شعاعيًا على محيط الوحدة إلى مسافة تُعطى بواسطة الجذر التربيعي لمتغير كاي تربيع 2، الطريقة القطبية لتوليد زوج من المتغيرات العشوائية الطبيعية.

الاعتبارات العملية

تطبيق مباشر لهذه الفكرة،

x=-2ln(u1)كوس(2πu2)،y=-2ln(u1)الخطيئة(2πu2){\displaystyle x={\sqrt {-2\ln(u_{1})}}\cos(2\pi u_{2}),\quad y={\sqrt {-2\ln(u_{1})}}\sin(2\pi u_{2})}

يُطلق عليه اسم تحويل بوكس-مولر ، والذي يتم فيه عادةً توليد متغير كاي على النحو التالي:

-2ln(u1)،{\displaystyle {\sqrt {-2\ln(u_{1})}},}

لكن هذا التحويل يتطلب دوال اللوغاريتم والجذر التربيعي والجيب وجيب التمام. في بعض المعالجات، يمكن حساب جيب وجيب تمام نفس الوسيط بالتوازي باستخدام تعليمة واحدة. [ 3 ] ومن الجدير بالذكر أنه بالنسبة للأجهزة التي تعمل بمعالجات إنتل، يمكن استخدام تعليمة التجميع fsincos أو تعليمة expi (المتوفرة مثلاً في لغة D) لحساب الأعداد المركبة.

تاريخ انتهاء الصلاحية(z)=هـأناz=كوس(z)+أناالخطيئة(z)،{\displaystyle \operatorname {expi} (z)=e^{iz}=\cos(z)+i\sin(z),\,}

وافصل ببساطة الأجزاء الحقيقية عن الأجزاء الخيالية.

ملاحظة: لحساب الصيغة القطبية المركبة بشكل صريح، استخدم الاستبدالات التالية في الصيغة العامة،

يتركر=-2ln(u1){\displaystyle r={\sqrt {-2\ln(u_{1})}}}وz=2πu2.{\displaystyle z=2\pi u_{2}.}ثم

 رهـأناz=-2ln(u1)هـأنا2πu2=-2ln(u1)[كوس(2πu2)+أناالخطيئة(2πu2)].{\displaystyle \ re^{iz}={\sqrt {-2\ln(u_{1})}}e^{i2\pi u_{2}}={\sqrt {-2\ln(u_{1})}}\left[\cos(2\pi u_{2})+i\sin(2\pi u_{2})\right].}

في المقابل، تُغني الطريقة القطبية هنا عن حساب جيب التمام وجيب الزاوية. فبدلاً من ذلك، بحل المعادلة لإيجاد نقطة على دائرة الوحدة ، يمكن استبدال هاتين الدالتين بإحداثيات س و ص مُعَيَّرة إلىx2+y2{\displaystyle {\sqrt {x^{2}+y^{2}}}}نصف القطر. على وجه الخصوص، يتم إسقاط نقطة عشوائية ( x , y ) داخل دائرة الوحدة على محيط الوحدة عن طريق تحديد s=x2+y2{\displaystyle s=x^{2}+y^{2}}وتشكيل النقطة

(xs،ys)،{\displaystyle \left({\frac {x}{\sqrt {s}}},{\frac {y}{\sqrt {s}}}\right),\,}

وهي عملية أسرع من حساب جيب التمام وجيب الزاوية. يرى بعض الباحثين أن استخدام عبارة if الشرطية (لرفض نقطة خارج دائرة الوحدة) قد يُبطئ البرامج على المعالجات الحديثة المزودة بتقنية التجزئة والتنبؤ بالتفرع. [ 4 ] كما تتطلب هذه العملية حوالي 27% تقييمات إضافية لمولد الأرقام العشوائية الأساسي (فقطπ/479%{\displaystyle \pi /4\approx 79\%}(تقع جميع النقاط المتولدة داخل دائرة الوحدة).

ثم يتم إسقاط تلك النقطة العشوائية على المحيط شعاعيًا على المسافة العشوائية المطلوبة بواسطة

-2ln(s)،{\displaystyle {\sqrt {-2\ln(s)}},\,}

باستخدام نفس قيمة s لأن قيمة s مستقلة عن النقطة العشوائية على المحيط وهي نفسها موزعة بشكل منتظم من 0 إلى  1.

تطبيق

بايثون

تطبيق بسيط بلغة بايثون :

استيراد الرياضيات استيراد عشوائيدالة marsaglia_sample ( ) : بينما صحيح : u1 = random.uniform ( -1 , 1 ) u2 = random.uniform ( -1 , 1 ) إذا ( w : = u1 ** 2 + u2 ** 2 ) < 1 : توقف z1 = u1 * math.sqrt ( -2 * math.log ( w ) / w ) z2 = u2 * math.sqrt ( -2 * math.log ( w ) / w ) إرجاع z1 ، z2

جافا

تطبيق بسيط بلغة جافا باستخدام المتوسط ​​والانحراف المعياري:

private static double spare ; private static boolean hasSpare = false ;public static synchronized double generateGaussian ( double mean , double stdDev ) { if ( hasSpare ) { hasSpare = false ; return spare * stdDev + mean ; } else { double u , v , s ; do { u = Math.random ( ) * 2 - 1 ; v = Math.random ( ) * 2 - 1 ; s = u * u + v * v ; } while ( s > = 1 || s == 0 ) ; s = Math.sqrt ( -2.0 * Math.log ( s ) / s ) ; spare = v * s ; hasSpare = true ; return mean + stdDev * u * s ; } }

لغة سي++

تطبيق غير آمن للاستخدام المتزامن في لغة C++ باستخدام المتوسط ​​والانحراف المعياري:

double generateGaussian ( double mean , double stdDev ) { static double spare ; static bool hasSpare = false ;إذا كان هناك عدد احتياطي ( hasSpare فسيتم تعيين hasSpare إلى false ، وسيتم إرجاع قيمة spare مضروبة في الانحراف المعياري + المتوسط . وإلا ، فسيتم تنفيذ ما يلي : يتم حساب u و v و s باستخدام المتغيرات u = ( rand () / (( double ) RAND_MAX )) * 2.0 - 1.0 و v = ( rand () / (( double ) RAND_MAX )) * 2.0 - 1.0 و s = u * u + v * v . ثم يتم حساب s باستخدام حلقة تكرارية طالما أن s أكبر من أو يساوي 1.0 أو يساوي 0.0 . يتم حساب s باستخدام الجذر التربيعي لـ ( -2.0 * log ( s ) / s ). يتم حساب spare باستخدام v * s ، ويتم تعيين hasSpare إلى true ، وسيتم إرجاع المتوسط ​​+ الانحراف المعياري * u * s .

يستخدم تطبيق مكتبة C++11 GNU GCC libstdc++ لـ std::normal_distribution طريقة Marsaglia القطبية، كما هو مقتبس من هنا .

جوليا

تطبيق بسيط بلغة جوليا :

"""  marsagliasample(N)قم بتوليد `2N` عينة من التوزيع الطبيعي القياسي باستخدام طريقة مارساجليا. """ دالة marsagliasample ( N ) z = Array { Float64 }( undef , N , 2 ); for i in axes ( z , 1 ) s = Inf ; while s > 1 z [ i , : ] .= 2 rand ( 2 ) .- 1 ; s = sum ( abs2 . ( z [ i , : ])) end z [ i , : ] .*= sqrt ( - 2 log ( s ) / s ); end vec ( z ) end"""  marsagliasample(n,μ,σ)قم بتوليد `n` عينة من التوزيع الطبيعي بمتوسط ​​`μ` وانحراف معياري `σ` باستخدام طريقة مارساجليا. """ function marsagliasample ( n , μ , σ ) μ .+ σ * marsagliasample ( cld ( n , 2 ))[ 1 : n ]; end

يمكن تنفيذ حلقة التكرار بالتوازي باستخدام Threads.@threadsالماكرو.

مراجع

  1. مارساجليا، ج.؛ براي، ت. أ. (1964). "طريقة ملائمة لتوليد المتغيرات الطبيعية". مجلة SIAM Review . 6 (3): 260-264 . Bibcode : 1964SIAMR...6..260M . doi : 10.1137/1006063 . JSTOR 2027592 . 
  2. ^ Peter E. Kloeden Eckhard Platen Henri Schurz، الحل العددي لـ SDE من خلال تجارب الكمبيوتر، سبرينغر، 1994.
  3. كانتر، ديفيد (22 أبريل 2012). "معمارية رسومات Ivy Bridge من إنتل" . Real World Tech . تم الاسترجاع في 8 أبريل 2013 .
  4. يمكن أن يتفاقم هذا التأثير في وحدة معالجة الرسومات (GPU) التي تولد العديد من المتغيرات بالتوازي، حيث يمكن أن يؤدي رفض أحد المعالجات إلى إبطاء العديد من المعالجات الأخرى. انظر القسم 7 من: Thomas, David B.; Howes, Lee W.; Luk, Wayne (2009)، "مقارنة بين وحدات المعالجة المركزية (CPUs) ووحدات معالجة الرسومات (GPUs) ومصفوفات البوابات المنطقية القابلة للبرمجة (FPGAs) ومصفوفات المعالجات المتوازية الضخمة لتوليد الأرقام العشوائية"، في: Chow, Paul; Cheung, Peter YK (محرران)، وقائع الندوة الدولية السابعة عشرة لجمعية آلات الحوسبة/جمعية تصميم وتطوير البوابات المنطقية القابلة للبرمجة الميدانية (ACM/SIGDA)، FPGA 2009، مونتيري، كاليفورنيا، الولايات المتحدة الأمريكية، 22-24 فبراير 2009 ، جمعية آلات الحوسبة ، الصفحات 63-72 ، CiteSeerX 10.1.1.149.6066 ، doi : 10.1145/1508128.1508139 ، ISBN   9781605584102، S2CID 465785 .