2014年8月5日に「3 次元空間の単位ベクトルを表す乱数」,2014年8月6日に「3 次元空間の単位ベクトルを表す乱数(その2)」という記事を2本書いた。
そのときは,ノルムが1より大きいベクトルを捨てていなかった。
n=3 のとき,ノルムが1より大きいベクトルを捨てないと,
のように,横軸が 1 〜2の間の頻度が比較的近い(横軸1あたりでカクンと変化がある)。
ノルムが1より大きいベクトルを捨ててシミュレーションすると,
のように,頭が丸くなる。
シミュレーションプログラムは以下の通り。
using Plots
plotly()
function sim(n=50000)
xyz = (rand(n, 3) .- 0.5) .* 2
r = vec(sum(xyz.^2, dims=2))
xyz = xyz[r .<= 1, :]
r = r[r .<= 1]
factor = sqrt.(r)
xyz ./ factor
end
function PearsonProblem(n = 4; dR = 0.1, trial = 100000)
xyz = sim(2n*trial) # 歩留まり考慮の水増し発注
N = size(xyz, 1)
println(N÷n)
dst = []
for i = 1:n:N÷n
dist = sqrt(sum(sum(xyz[i:i+n-1, :], dims=1) .^ 2))
append!(dst, dist)
end
return dst
end
dst = PearsonProblem(3, trial=1000000);
histogram(dst)
※コメント投稿者のブログIDはブログ作成者のみに通知されます