Aus rein probabilistischer Sicht sind beide Ansätze richtig und daher gleichwertig. Aus algorithmischer Sicht muss der Vergleich sowohl die Genauigkeit als auch die Rechenkosten berücksichtigen.
Box-Muller setzt auf einen einheitlichen Generator und kostet ungefähr das Gleiche wie dieser einheitliche Generator. Wie in meinem Kommentar erwähnt, können Sie ohne Sinus- oder Cosinus-Aufrufe davonkommen, wenn nicht ohne den Logarithmus:
- generiere bis
U1,U2∼iidU(−1,1)
S=U21+U22≤1
- nimm und definiereZ=−2log(S)/S−−−−−−−−−−√
X1=ZU1, X2=ZU2
Der generische Inversionsalgorithmus erfordert beispielsweise den Aufruf der inversen normalen cdf qnorm(runif(N))
in R, die teurer als die oben genannten sein und, was noch wichtiger ist, in Bezug auf die Genauigkeit in den Schwänzen versagen kann, sofern die Quantilfunktion nicht gut codiert ist.
Um den Kommentaren von whuber zu folgen , ist der Vergleich von rnorm(N)
und qnorm(runif(N))
der Vorteil des inversen cdf, sowohl in Bezug auf die Ausführungszeit:
> 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` `
und in Bezug auf die Passform im Schwanz:
Nach einem Kommentar von Radford Neal in meinem Blog möchte ich darauf hinweisen, dass der Standardwert rnorm
in R die Inversionsmethode verwendet, sodass der obige Vergleich sich auf die Schnittstelle und nicht auf die Simulationsmethode selbst auswirkt! So zitieren Sie die R-Dokumentation zu RNG:
‘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.