Self-Study

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

  • August 5, 2020

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

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α 取決於它們是如何在計算上聯繫起來的。

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

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=(X2+Y2)1/2A=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=rcosα$$y=rsinα$
\left|\frac{\text{d}(X,Y)}{\text{d}(R,A)}(r,\alpha)\right|=r(\sin^2\alpha+\cos^2\alpha)=r $$ 因此,角度 A 均勻分佈在 (0,2π) 但半徑 R 有密度 f(r)=2rI(0,1)(r) 和 cdf F(r)=r2 超過 (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