在磁盤上均勻生成隨機點[重複]
我必須在一個單位磁盤上隨機生成 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)
然後我查看我的樣本空間,它看起來像這樣:
這顯然不像磁盤上均勻分佈的樣本。因此,我猜測問題可能是由於變量之間缺乏獨立性而發生的 $ 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)
而且,該樣本再次看起來在磁盤上分佈不均勻
我開始懷疑附近有更深層次的數學問題。有人可以幫我編寫代碼來創建一個均勻分佈在磁盤上的樣本空間,或者在我的推理中解釋數學謬誤嗎?
問題是由於半徑不是均勻分佈的。即,如果 $ (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³ 模擬點的隨機重新分配與統一兼容: