Dalam analisis ini, kita akan membahas bagaimana menghasilkan sampel secara acak pada suatu annulus (sebagai contoh, sebuah lingkaran yang memiliki jari-jari variabel). Kita akan menggunakan deretan intuitif dan langkah-langkah sederhana untuk mencapai tujuan tersebut.
Menghitung PDF
Pertama-tama, kita perlu menghitung fungsi probabilitas (PDF) dari distribusi radius. Dalam kasus ini, kita asumsikan bahwa pengacakan adalah simetri dalam polar, sehingga bagian itu menjadi trivial. Semua yang kita perlukan untuk memahami adalah distribusi pada jarak r.
Misalkan Anda ingin melihat pengambilan acak uniform pada lingkaran dari a ke b. Kita akan menganggap radius r sebagai variabel yang tetap, maka sekarang hanya sebuah lingkaran dengan jari-jari r. Kita ingin melihat bahwa proporsi 2πr*d titik di sekitar lingkaran infinitesimally sempit. Dengan demikian, kita mendapatkan distribusi radius.
PDF = d * r
Di mana d adalah kepadatan packing, dan r akan berubah dari a ke b. Kita perlu normalisasi PDF sehingga memiliki luas area yang sama pada domain tersebut.
Menghitung CDF
Sekarang kita telah memiliki PDF, kita dapat menghitung fungsi kumulatif (CDF) distribusi radius dengan hanya menerapkan integral terhadap r.
CDF = ∫(PDF * dr) dari [a, R]
Di mana r akan hidup di interval [a, b]. Dan juga perhatikan bahwa saya menggunakan integral definite dari a ke radius R. Hal ini sangat penting!
Sampling dari Distribusi
Bagaimana kita dapat mengambil sampel dari distribusi ketika CDF yang diketahui dan memiliki invers yang sederhana? Sendiri adalah hal yang mudah. Kita menggunakan invers CDF. Artinya, kita memilih pengacakan acak uniform pada interval [0, 1]. Rand melakukan hal ini dengan sempurna.
Kita dapat menghitung invers CDF sebagai berikut:
CDFinv = solve(CDF == u, R)
Kita ingin solusi kedua, karena itu adalah solusi positif.
Kita dapat menuliskan fungsi tersebut sebagai berikut:
CDFinvfun = @(u, a, b) sqrt((b^2-a^2)*u + a^2)
Kita hanya menulisnya sebagai fungsi, karena matlabFunction melakukan sesuatu yang aneh pada saya, dan itu masih terlalu pagi untuk saya berpikir.
Rsample = CDFinvfun(Usample, 1, 10);
histogram(Rsample, 100, 'norm', 'pdf')
Dan Anda melihat bahwa sampel PDF linear sempurna muncul dalam interval [a, b]. Sekarang mari kita coba!
Rsample = CDFinvfun(Usample, 1, 10);
axis equal
Dan itu adalah apa yang kita inginkan. Sampel uniform pada annulus.
Catatan
Jika apa yang saya lakukan tidak memahami, maka silakan Anda melalui langkah-langkah tersebut dengan seksama. Saya berusaha se komplet mungkin dalam jawaban saya, tetapi saya yakin saya berlalu terlalu cepat di beberapa titik.
Addendum
Beberapa titik yang menarik lainnya yang saya lupakan di atas adalah sebagai berikut:
Pemecahan keseluruhan ditujukan langsung dari asumsi pengacakan uniform pada annulus. Hal ini secara langsung implikasi PDF, dan kemudian sisanya mengikutinya.
Penggunaan integral definite untuk menghitung CDF sangat penting, karena jika Anda hanya menghitung integral tidak terbatas dengan flag-flag lain ke int, maka konstanta integrasi akan hilang. Integral definite secara implisit membangun konstanta integrasi yang benar ke dalam CDF. Saya pikir hal ini adalah titik yang mudah dilewatkan.
Pemecahan di atas juga dapat diperluas secara trivial ke 3 atau lebih dimensi, sehingga dengan sfera annular. Dalam kasus tersebut, transformasi akan berbeda, tetapi dapat dengan mudah dihasilkan berdasarkan polinomial PDF pada domain annular terbatas.
Jika Anda mengikuti pemecahan yang saya posisikan, maka Anda dapat melihat bahwa ketika a == 0, dan kita ingin hanya mengambil sampel uniform pada lingkaran dari a ke b.