裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

3 次元空間の単位ベクトルを表す乱数(その4)

2021年02月12日 | ブログラミング

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)

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 球面上で一様に分布する点を... | トップ | Julia のグラフで添え字など... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事