Box – Muller transform - Box–Muller transform

Visualisering av Box-Muller-transformasjonen - de fargede punktene i enhetsfeltet (u1, u2), tegnet som sirkler, er kartlagt til en 2D-gaussisk (z0, z1), tegnet som kryss. Tomtene ved marginene er sannsynlighetsfordelingsfunksjonene til z0 og z1. Merk at z0 og z1 er ubegrenset; de ser ut til å være i [-2.5,2.5] på grunn av valget av de illustrerte punktene. I SVG-filen holder du markøren over et punkt for å markere det og dets tilsvarende punkt.

Den Box-Muller transform , av George Edward Pelham Box og Mervin Edgar Muller , er et tilfeldig tall prøvetaking metode for generering av par av uavhengig , standard, normalfordelt (null forventning , enhet varians ) tilfeldige tall, gitt en kilde av jevnt fordelte tilfeldige tall . Metoden ble faktisk først nevnt eksplisitt av Raymond EAC Paley og Norbert Wiener i 1934.

Box-Muller-transformasjonen uttrykkes ofte i to former. Den grunnleggende skjemaet gitt av Box og Muller tar to prøver fra den jevne fordelingen i intervallet [0, 1] og kartlegger dem til to standardprøver som normalt distribueres. Polarformen tar to prøver fra et annet intervall, [−1, +1], og kartlegger dem til to normalt distribuerte prøver uten bruk av sinus- eller cosinusfunksjoner.

Box-Muller transformasjonen ble utviklet som et mer beregningseffektivt alternativ til metoden for invers transformasjon . The Ziggurat algoritme gir en mer effektiv metode for skalar-prosessorer (f.eks gammel CPU), mens den Box-Muller transform er overlegen for prosessorer med vektor-enheter (f.eks GPU'er eller moderne CPU).

Grunnleggende skjema

Anta at U 1 og U 2 er uavhengige prøver valgt fra den jevne fordelingen på enhetsintervallet (0, 1). La

og

Deretter Z 0 og Z 1 er uavhengige tilfeldige variable med en standard normalfordeling .

Utledningen er basert på en egenskap ved et to-dimensjonalt kartesisk system , hvor X- og Y-koordinatene er beskrevet ved hjelp av to uavhengige og normalfordelt tilfeldige variable, de tilfeldige variable for R 2 og Θ (vist ovenfor) i de tilsvarende polarkoordinater er også uavhengig og kan uttrykkes som

og

Fordi R 2 er kvadratet av normen av standard bivariate normal variabel ( X Y ), har den khikvadratfordeling med to frihetsgrader. I det spesielle tilfellet med to frihetsgrader, det khikvadratfordeling faller sammen med eksponensiell fordeling , og likningen for R 2 ovenfor er en enkel måte å generere de nødvendige eksponensiell variate.

Polarform

To jevnt fordelte verdier, u og v er brukt for å fremstille verdi s = R 2 , som likeledes er jevnt fordelt. Definisjonene av sinus og cosinus blir deretter brukt på den grunnleggende formen for Box-Muller-transformasjonen for å unngå å bruke trigonometriske funksjoner.

Polarformen ble først foreslått av J. Bell og deretter modifisert av R. Knop. Mens flere forskjellige versjoner av den polare metoden er beskrevet, vil versjonen av R. Knop bli beskrevet her fordi den er den mest brukte, delvis på grunn av dens inkludering i Numerical Recipes .

Gitt u og v , uavhengig og jevnt fordelt i det lukkede intervallet [−1, +1], sett s = R 2 = u 2 + v 2 . Hvis s = 0 eller s ≥ 1 , kast u og v , og prøv et annet par ( u v ). Fordi u og v er jevnt fordelt og fordi bare punkter i enhetssirkelen er tillatt, vil verdiene til s også være jevnt fordelt i det åpne intervallet (0, 1). Sistnevnte kan sees ved å beregne den kumulative fordelingsfunksjonen for s i intervallet (0, 1). Dette er området til en sirkel med radius , delt på . Fra dette finner vi sannsynlighetstetthetsfunksjonen til å ha den konstante verdien 1 på intervallet (0, 1). Like så er vinkelen θ delt på jevnt fordelt i intervallet [0, 1) og uavhengig av s .

Vi identifiserer nå verdien av s med U 1 og med U 2 i grunnformen. Som vist i figuren kan verdiene til og i grunnformen erstattes med forholdstallene og henholdsvis. Fordelen er at direkte beregning av trigonometriske funksjoner kan unngås. Dette er nyttig når trigonometriske funksjoner er dyrere å beregne enn den enkeltdelingen som erstatter hver enkelt.

Akkurat som grunnformen produserer to standardnormale avvik, gjør også denne alternative beregningen.

og

Kontrasterer de to formene

Polarmetoden skiller seg fra den grunnleggende metoden ved at den er en type avvisningssampling . Det forkaster noen genererte tilfeldige tall, men kan være raskere enn den grunnleggende metoden fordi det er enklere å beregne (forutsatt at tilfeldig tallgenerator er relativt rask) og er mer numerisk robust. Å unngå bruk av dyre trigonometriske funksjoner forbedrer hastigheten i forhold til grunnformen. Den forkaster 1 - π / 4 ≈ 21,46% av det totale inngående jevnt fordelte tilfeldige antall par som genereres, dvs. kasseres 4 / π - 1 ≈ 27,32% jevnt fordelt tilfeldig antall par per Gaussisk tilfeldig tallpar generert, og krever 4 / π ≈ 1.2732 inngang tilfeldige tall per tilfeldig nummer.

Den grunnleggende formen krever to multiplikasjoner, 1/2 logaritme, 1/2 kvadratrot og en trigonometrisk funksjon for hver normale variat. På noen prosessorer kan cosinus og sinus for det samme argumentet beregnes parallelt ved hjelp av en enkelt instruksjon. Spesielt for Intel-baserte maskiner, kan man bruke de fsincos assembler instruksjon eller expi instruksjon (vanligvis tilgjengelig fra C som en iboende funksjon ), for å beregne kompleks

og bare skille de virkelige og imaginære delene.

Merk: For å eksplisitt beregne den komplekspolære formen, bruk følgende erstatninger i den generelle formen,

La og deretter

Polarformen krever 3/2 multiplikasjoner, 1/2 logaritme, 1/2 kvadratrot og 1/2 divisjon for hver normale variat. Effekten er å erstatte en multiplikasjon og en trigonometrisk funksjon med en enkelt divisjon og en betinget sløyfe.

Haler avkorting

Når en datamaskin brukes til å produsere en jevn tilfeldig variabel, vil den uunngåelig ha noen unøyaktigheter fordi det er en nedre grense for hvor nær tall kan være 0. Hvis generatoren bruker 32 bits per utgangsverdi, det minste ikke-null tallet som kan genereres er . Når og er like dette, gir Box – Muller-transformasjonen et normalt tilfeldig avvik lik . Dette betyr at algoritmen ikke vil produsere tilfeldige variabler mer enn 6.660 standardavvik fra gjennomsnittet. Dette tilsvarer en andel av tapt på grunn av avkuttingen, hvor er standard kumulativ normalfordeling. Med 64 bits skyves grensen til standardavvik, for hvilke .

Gjennomføring

Standard Box – Muller transform genererer verdier fra standard normalfordeling ( dvs. standard normalavvik ) med gjennomsnitt 0 og standardavvik 1 . Implementeringen nedenfor i standard C ++ genererer verdier fra normalfordeling med gjennomsnitt og varians . Hvis er et standard normalavvik, så vil det ha en normalfordeling med gjennomsnitt og standardavvik . Merk at tilfeldige tallgenerator har blitt sådd for å sikre at nye, pseudo-tilfeldige verdier blir returnert fra sekvensielle anrop til funksjonen. generateGaussianNoise

#include <cmath>
#include <limits>
#include <random>
#include <utility>

std::pair<double, double> generateGaussianNoise(double mu, double sigma)
{
    constexpr double epsilon = std::numeric_limits<double>::epsilon();
    constexpr double two_pi = 2.0 * M_PI;

    //initialize the random uniform number generator (runif) in a range 0 to 1
    static std::mt19937 rng(std::random_device{}()); // Standard mersenne_twister_engine seeded with rd()
    static std::uniform_real_distribution<> runif(0.0, 1.0);

    //create two random numbers, make sure u1 is greater than epsilon
    double u1, u2;
    do
    {
        u1 = runif(rng);
        u2 = runif(rng);
    }
    while (u1 <= epsilon);

    //compute z0 and z1
    auto mag = sigma * sqrt(-2.0 * log(u1));
    auto z0  = mag * cos(two_pi * u2) + mu;
    auto z1  = mag * sin(two_pi * u2) + mu;

    return std::make_pair(z0, z1);
}

Se også

Referanser

  • Howes, Lee; Thomas, David (2008). GPU Gems 3 - Effektiv tilfeldig nummergenerering og applikasjon ved bruk av CUDA . Pearson Education, Inc. ISBN   978-0-321-51526-1 .
  1. ^ Boks, GEP; Muller, Mervin E. (1958). "En merknad om generering av tilfeldige normale avvik" . Annalene for matematisk statistikk . 29 (2): 610–611. doi : 10.1214 / aoms / 1177706645 . JSTOR   2237361 .
  2. ^ Raymond EAC Paley og Norbert Wiener Fourier Transforms in the Complex Domain, New York: American Mathematical Society (1934) §37.
  3. ^ Kloeden and Platen, Numerical Solutions of Stochastic Differential Equations , s. 11–12
  4. ^ Howes & Thomas 2008 .
  5. ^ Sheldon Ross, A First Course in Probability , (2002), s. 279–281
  6. ^ a b Bell, James R. (1968). "Algoritme 334: Normal tilfeldig avviker" . Kommunikasjon av ACM . 11 (7): 498. doi : 10.1145 / 363397.363547 .
  7. ^ Knop, R. (1969). "Bemerkning om algoritme 334 [G5]: Normal tilfeldig avviker" . Kommunikasjon av ACM . 12 (5): 281. doi : 10.1145 / 362946.362996 .
  8. ^ Everett F. Carter, Jr., The Generation and Application of Random Numbers , Forth Dimensions (1994), Vol. 16, nr. 1 og 2.
  9. ^ Merk at vurderingen av 2 π U 1 telles som en multiplikasjon fordi verdien av 2 π kan beregnes på forhånd og brukes gjentatte ganger.

Eksterne linker