Tamamen olasılıklı bir bakış açısından, her iki yaklaşım da doğru ve dolayısıyla eşdeğerdir. Algoritmik bir bakış açısından, karşılaştırma hem hassasiyeti hem de hesaplama maliyetini dikkate almalıdır.
Box-Muller tek tip bir jeneratöre dayanır ve bu tek tip jeneratörle yaklaşık aynı maliyete sahiptir. Yorumumda belirtildiği gibi, logaritma olmadan olmasa da, sinüs veya kosinüs çağrıları olmadan uzaklaşabilirsiniz:
- S = U 2 1 + U 2 2 ≤ 1 olana kadar üretir
U1,U2∼iidU(−1,1)
S=U21+U22≤1
- almak veX1=ZU1'itanımlayınZ=−2log(S)/S−−−−−−−−−−√
X1=ZU1, X2=ZU2
Genel tersine çevirme algoritması, örneğin ters normal cdf'ye çağrı yapılmasını gerektirir. qnorm(runif(N))
R'de, yukarıdakilerden daha pahalıya mal olabilen ve daha önemlisi, kantil fonksiyon iyi kodlanmadığı sürece, kuyruk bakımından hassasiyet açısından başarısız olabilen .
Whuber tarafından yapılan yorumları takip etmek için , her ikisi de yürütme zamanında ters cdf'nin karşılaştırması rnorm(N)
ve qnorm(runif(N))
avantajı vardır:
> 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` `
ve kuyruğa uyum açısından:
Blogumda Radford Neal'un bir yorumunu takiben rnorm
, R'deki varsayılanın inversiyon yöntemini kullandığını, dolayısıyla yukarıdaki karşılaştırmanın simülasyon yönteminin kendisini değil, arayüzü yansıttığını belirtmek istiyorum! RNG ile ilgili R belgelerini alıntılamak için:
‘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.