विशुद्ध रूप से संभाव्य दृष्टिकोण से, दोनों दृष्टिकोण सही हैं और इसलिए समतुल्य हैं। एक एल्गोरिथम दृष्टिकोण से, तुलना को सटीक और कंप्यूटिंग लागत दोनों पर विचार करना चाहिए।
बॉक्स-मुलर एक समान जनरेटर पर निर्भर करता है और इस वर्दी जनरेटर के समान ही खर्च होता है। जैसा कि मेरी टिप्पणी में उल्लेख किया गया है, आप साइन या कोसाइन कॉल के बिना दूर हो सकते हैं, यदि लघुगणक के बिना नहीं:
- उत्पन्न तक एस = यू 2 1 + यू 2 2 ≤ 1
U1,U2∼iidU(−1,1)
S=U21+U22≤1
- ले और परिभाषितएक्स1=जेडयू1Z=−2log(S)/S−−−−−−−−−−√
X1=ZU1, X2=ZU2
जेनेरिक इनवर्जन एल्गोरिथ्म को qnorm(runif(N))
आर में उलटे सामान्य सीएफडी के लिए कॉल की आवश्यकता होती है, उदाहरण के लिए आर में, जो ऊपर की तुलना में अधिक महंगा हो सकता है और अधिक महत्वपूर्ण रूप से सटीक के संदर्भ में पूंछ में विफल हो सकता है, जब तक कि क्वांटाइल फ़ंक्शन अच्छी तरह से कोडित नहीं होता है।
द्वारा की गई टिप्पणियों पर अनुसरण करने के लिए व्हुबेर , इसकी तुलना rnorm(N)
और qnorm(runif(N))
उलटा सीएफडी के लाभ के लिए, निष्पादन समय में दोनों:
> system.time(qnorm(runif(10^8)))
sutilisateur système écoulé
10.137 0.120 10.251
> system.time(rnorm(10^8))
utilisateur système écoulé
13.417 0.060 13.472` `
और पूंछ में फिट के संदर्भ में:
अपने ब्लॉग पर रेडफोर्ड नील की एक टिप्पणी के बाद , मैं यह बताना चाहता हूं कि rnorm
आर में डिफ़ॉल्ट व्युत्क्रम विधि का उपयोग करता है, इसलिए कि उपरोक्त तुलना इंटरफ़ेस पर प्रतिबिंबित हो रही है न कि सिमुलेशन विधि पर! RNG पर R प्रलेखन उद्धृत करने के लिए:
‘normal.kind’ can be ‘"Kinderman-Ramage"’, ‘"Buggy
Kinderman-Ramage"’ (not for ‘set.seed’), ‘"Ahrens-Dieter"’,
‘"Box-Muller"’, ‘"Inversion"’ (the default), or ‘"user-supplied"’.
(For inversion, see the reference in ‘qnorm’.) The
Kinderman-Ramage generator used in versions prior to 1.7.1 (now
called ‘"Buggy"’) had several approximation errors and should only
be used for reproduction of old results. The ‘"Box-Muller"’
generator is stateful as pairs of normals are generated and
returned sequentially. The state is reset whenever it is selected
(even if it is the current normal generator) and when ‘kind’ is
changed.