新しい記事「3 次元空間の単位ベクトルを表す乱数(その4)」を参照
n 次元空間に拡張するには,(その2)の PearsonProblem3 が都合がよい。というか,2 箇所にある 3 を引数(dimension としよう)で指定してやるだけだ。
PearsonProblem4 = function(n = 4, dimension = 5, dR = 0.1, trial = 1e+05) {
xyz = array(runif(dimension * n * trial, min = -1, max = 1), dim = c(dimension, n, trial))
xyz = apply(xyz, 2:3, function(xyz2) xyz2/sqrt(sum(xyz2^2)))
apply(xyz, 3, function(xyz2) sqrt(sum(rowSums(xyz2)^2)))
}
ans = PearsonProblem4(n = 2, dimension = 2, trial = 1e+06)
mean(ans)
hist(ans, nclass = 50)
で,上のように,2 次元で 2 歩進む場合をやってみると,原点と到達点の距離が 2 に近いというのが意外と多い。
プログラムを間違えたかと,図に描いてみた。
PearsonProblem5 = function(n = 4, dR = 0.1, trial = 1e+05) {
dimension = 2
theta = seq(0, 2 * pi, length = 500)
x = n * cos(theta)
y = n * sin(theta)
plot(x, y, type = "l", asp = 1)
xyz = array(runif(dimension * n * trial, min = -1, max = 1), dim = c(dimension, n, trial))
xyz = apply(xyz, 2:3, function(xyz2) xyz2/sqrt(sum(xyz2^2)))
apply(xyz, 3, function(xyz2) {
lines(c(0, cumsum(xyz2[1, ])), c(0, cumsum(xyz2[2, ])), col="gray80")
points(cumsum(xyz2[1, ])[n], cumsum(xyz2[2, ])[n], col = "red", pch = 16)
})
}
PearsonProblem5(n = 2, trial = 100)
確かに,半径2の円周の近くに達する場合が結構ある。
パラドックスかなあ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます