Ich habe versucht, die Injektion von zufälligen Punkten innerhalb eines Kreises so zu simulieren, dass jeder Teil des Kreises die gleiche Wahrscheinlichkeit hat, einen Defekt zu haben. Ich habe erwartet, dass die Anzahl pro Fläche der resultierenden Verteilung einer Poisson-Verteilung folgt, wenn ich den Kreis in Rechtecke gleicher Fläche aufteile.
Da es nur erforderlich ist, Punkte innerhalb einer kreisförmigen Fläche zu platzieren, habe ich zwei gleichmäßige Zufallsverteilungen in Polarkoordinaten injiziert: (Radius) und (Polarwinkel).θ
Aber nach dieser Injektion bekomme ich deutlich mehr Punkte in der Mitte des Kreises als am Rand.
Was wäre der richtige Weg, um diese Injektion so über den Kreis zu führen, dass die Punkte zufällig über den Kreis verteilt sind?
quelle
Antworten:
Sie möchten, dass der Anteil der Punkte gleichmäßig proportional zur Fläche und nicht zum Abstand zum Ursprung ist. Da die Fläche proportional zum Quadratabstand ist, erzeugen Sie gleichmäßige Zufallsradien und nehmen Sie deren Quadratwurzeln. Kombiniere das mit einem gleichmäßigen Polarwinkel.
Dies ist schnell und einfach zu codieren, effizient auszuführen (insbesondere auf einer parallelen Plattform) und generiert genau die vorgeschriebene Anzahl von Punkten.
Beispiel
Dies ist der
R
Arbeitscode zur Veranschaulichung des Algorithmus.quelle
Ablehnungsabtastung kann verwendet werden. Dies bedeutet, dass wir Proben aus der 2D-Gleichverteilung nehmen und Proben auswählen können, die den Disc-Bedingungen entsprechen.
Hier ist ein Beispiel.
quelle
Ich gebe Ihnen eine allgemeine n-dimensionale Antwort, die natürlich auch für zweidimensionale Fälle funktioniert. In drei Dimensionen ist ein Analogon einer Scheibe ein Volumen einer festen Kugel (Kugel).
Es gibt zwei Ansätze, die ich diskutieren werde. Eine davon würde ich als "präzise" bezeichnen , und in R erhalten Sie eine vollständige Lösung. Die zweite, die ich als heuristisch bezeichne , ist nur die Idee, es wird keine vollständige Lösung bereitgestellt.
"Präzise" Lösung
Meine Lösung basiert auf den Arbeiten von Marsaglia und Müller . Grundsätzlich geschieht dies so, dass der auf seine Norm normierte Gaußsche Vektor die gleichmäßig verteilten Punkte auf einer d-dimensionalen Hypersphäre liefert:
Hier ist ein Code-Snippet für eine 3D-Hülle, dh eine feste Kugel:
Heuristischer Ansatz
Die Lösung, die ich vorschlage, besteht darin, die Zurückweisungsabtastung mit einer Überabtastung der Punkte in der Nähe des Zentrums zu verwenden. Es stellt sich heraus, dass, wenn Sie eine der kartesischen Koordinaten der zufälligen einheitlichen Stichprobe aus dem Inneren des Balls beobachten, dessen Verteilung zu einem Gaußschen Wert mit der Varianz konvergiert1d+ 2√
quelle
Hier ist eine alternative Lösung in
R
:quelle
r <- seq(0, 1, by=1/10)
r
von Uniform (0,1) nehmen.