Self-Study

在磁盤上均勻生成隨機點[重複]

  • August 5, 2020

我必須在一個單位磁盤上隨機生成 1000 個點,以便均勻分佈在該磁盤上。現在,為此,我選擇一個半徑 $ r $ 和角度方向 $ \alpha $ 使得半徑 $ r $ 是一個均勻分佈的變量 $ r \in [0,1] $ 儘管 $ \alpha $ 是一個均勻分佈的變量 $ \alpha \in [0, 2\pi] $ 使用以下代碼

r <- runif(1000, min=0, max=1) 
alpha <- runif(1000, min=0, max=2*pi)
x <- r*cos(alpha)
y <- r*sin(alpha)
plot(x,y, pch=19, col=rgb(0,0,0,0.05), asp=1)

然後我查看我的樣本空間,它看起來像這樣:

樣品空間_1

這顯然不像磁盤上均勻分佈的樣本。因此,我猜測問題可能是由於變量之間缺乏獨立性而發生的 $ r $ 和 $ \alpha $ 取決於它們是如何在計算上聯繫起來的。

為了解決這個問題,我編寫了一個新代碼。

rm(list=ls())
r <- runif(32, min=0, max=1)
df_res <- data.frame(matrix(c(-Inf, Inf), byrow = T, nrow = 1))
for (i in 1:32) {
 for (j in 1:32) {
   alpha <- runif(32, min=0, max=2*pi)
   r <- runif(32, min=0, max=1)
   df <- data.frame(matrix(c(r[i],alpha[j]), byrow = T, nrow = 1))
   df_res <- rbind(df_res,df)
 }
}
df_res <- subset(df_res, df_res$X1 != -Inf)
x<- df_res$X1 *cos(df_res$X2)
y <- df_res$X1 *sin(df_res$X2)
plot(x,y, pch=19, col=rgb(0,0,0,0.05), asp=1)

而且,該樣本再次看起來在磁盤上分佈不均勻

樣品空間_2

我開始懷疑附近有更深層次的數學問題。有人可以幫我編寫代碼來創建一個均勻分佈在磁盤上的樣本空間,或者在我的推理中解釋數學謬誤嗎?

問題是由於半徑不是均勻分佈的。即,如果 $ (X,Y) $ 均勻分佈在 $$ \left{ (x,y);\ x^2+y^2\le 1\right} $$ 那麼變量的(極坐標)變化 $$ R=(X^2+Y^2)^{1/2}\qquad A=\text{sign}(Y)\arccos(X/R) $$ 有密度 $$ \frac{1}{\pi} \mathbb{I}{(0,1)}(r)\left|\frac{\text{d}(X,Y)}{\text{d}(R,A)}(r,\alpha)\right|\mathbb{I}{(0,2\pi)}(\alpha) $$ 使用 $ x = r \cos \alpha $ 和 $ y = r \sin \alpha $ 造成 $$ \left|\frac{\text{d}(X,Y)}{\text{d}(R,A)}(r,\alpha)\right|=r(\sin^2\alpha+\cos^2\alpha)=r $$ 因此,角度 $ A $ 均勻分佈在 $ (0,2\pi) $ 但半徑 $ R $ 有密度 $ f(r)=2r\mathbb{I}_{(0,1)}(r) $ 和 cdf $ F(r)=r^2 $ 超過 $ (0,1) $ . 正如一個可以通過運行檢查

r <- sqrt(runif(1000, min=0, max=1) )
alpha <- runif(1000, min=0, max=2*pi)
x <- r*cos(alpha)
y <- r*sin(alpha)
plot(x,y, pch=19, col=rgb(0,0,0,0.05), asp=1)

其中半徑由逆 cdf 表示模擬,這使其成為 Uniform 變量的平方根,10³ 模擬點的隨機重新分配與統一兼容:

在此處輸入圖像描述

引用自:https://stats.stackexchange.com/questions/481543

comments powered by Disqus