Saya mencoba mensimulasikan injeksi titik acak di dalam lingkaran, sehingga setiap bagian dari lingkaran memiliki kemungkinan yang sama memiliki cacat. Saya mengharapkan penghitungan per area dari distribusi yang dihasilkan untuk mengikuti distribusi Poisson jika saya memecah lingkaran menjadi persegi area yang sama.
Karena hanya membutuhkan penempatan titik dalam area melingkar, saya menyuntikkan dua distribusi acak seragam dalam koordinat polar: (radius) dan (sudut polar).
Tetapi setelah melakukan injeksi ini, saya jelas mendapatkan lebih banyak poin di tengah lingkaran dibandingkan dengan tepi.
Apa cara yang benar untuk melakukan injeksi ini di seluruh lingkaran sehingga titik-titik didistribusikan secara acak di seluruh lingkaran?
random-generation
circular-statistics
Jonjilla
sumber
sumber
Jawaban:
Anda ingin proporsi titik sebanding secara proporsional dengan area daripada jarak ke titik asal. Karena luas sebanding dengan jarak kuadrat, hasilkan jari-jari acak yang seragam dan ambil akar kuadratnya. Kombinasikan itu dengan sudut kutub yang seragam.
Ini cepat dan mudah dikodekan, efisien dalam pelaksanaannya (terutama pada platform paralel), dan menghasilkan jumlah titik yang ditentukan dengan tepat.
Contoh
Ini adalah
R
kode yang berfungsi untuk menggambarkan algoritma.sumber
Sampling Penolakan dapat digunakan. Ini berarti kami dapat mengambil sampel dari distribusi seragam 2D, dan memilih sampel yang memenuhi kondisi disk.
Berikut ini sebuah contoh.
sumber
Saya akan memberi Anda jawaban n-dimensi umum yang bekerja untuk kasus dua dimensi juga, tentu saja. Dalam tiga dimensi analog disk adalah volume bola padat (bola).
Ada dua pendekatan yang akan saya bahas. Salah satunya saya sebut "tepat" , dan Anda akan mendapatkan solusi lengkap dengan itu di R. Yang kedua saya sebut heuristik , dan itu hanya idenya, tidak ada solusi lengkap yang disediakan.
Solusi "Tepat"
Solusi saya didasarkan pada karya Marsaglia dan Muller . Pada dasarnya, itu terjadi sehingga vektor Gaussian dinormalisasi dengan normanya akan memberi Anda titik-titik yang terdistribusi secara merata pada hypersphere dimensi-d:
Berikut cuplikan kode untuk case 3d, yaitu bola padat:
Pendekatan heuristik
sumber
Berikut adalah solusi alternatif di
R
:sumber
r <- seq(0, 1, by=1/10)
r
dari Uniform (0,1).