新しい記事「3 次元空間の単位ベクトルを表す乱数(その4)」を参照
昨日のピアソン問題では,極座標において角度をランダムに選択すると仮定した。そのようにすると,直交座標におけるベクトルの要素値は一様分布しないことになる。
そこで,直交座標で一様分布するように x, y, z を [-1, 1] の一様乱数から取り出し,ノルムが 1 になるように正規化するようにした。
プログラムは非常に簡単になった(オリジナルの作者のプログラムは VBA で書かれていたので判読が難しい)。
また,n 歩進んだ後の X, Y, Z 座標にも偏りはない(平均値は 0 に近い)。
PearsonProblem3 = function(n = 4, dR = 0.1, trial = 1e+05) {
xyz = array(runif(3 * n * trial, min = -1, max = 1), dim = c(3, 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 = PearsonProblem3(n = 3, trial = 1e+06)
mean(ans)
hist(ans, nclass = 50)
結果は,下図のようになった。分布の形が違う(オリジナルの作者のものとも違う)。
このシミュレーションでは,平均値は 1.624884 であった。