খাঁটি সম্ভাব্য দৃষ্টিভঙ্গি থেকে উভয় পন্থা সঠিক এবং তাই সমান। অ্যালগরিদমিক দৃষ্টিকোণ থেকে, তুলনা অবশ্যই যথার্থতা এবং কম্পিউটিং ব্যয় উভয় বিবেচনা করতে হবে।
বক্স-মুলার একটি ইউনিফর্ম জেনারেটরের উপর নির্ভর করে এবং এই ইউনিফর্ম জেনারেটরের সমান দাম। আমার মন্তব্যে যেমন উল্লেখ করা হয়েছে, আপনি লগারিদম না থাকলে সাইন বা কোসাইন কল ছাড়াই পালাতে পারবেন:
- S = U 2 1 + U 2 অবধি উত্পন্ন করুন
U1,U2∼iidU(−1,1)
S=U21+U22≤1
- গ্রহণ করা এবংএক্স1সংজ্ঞায়িত করুনZ=−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
ইনভার্সন পদ্ধতিটি ব্যবহার করে, সুতরাং উপরের তুলনাটি ইন্টারফেসে প্রতিফলিত হয়, সিমুলেশন পদ্ধতিতে নয়! আরএনজিতে আর ডকুমেন্টেশন উদ্ধৃত করতে:
‘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.