2017年3月28日火曜日

JuliaLang: ランダムウォークシミュレーション

環境
OS: Manjaro
Julia v0.5.1

1次元ランダムウォーク

原点 0 から出発して各ステップで 確率 1/2 で右に、確率 1/2 で左に進む
using Plots
gr(leg=false)
nstep = 1_000
Δx = rand([-1,1], nstep)
x = cumsum(Δx)
unshift!(x, 0)

plot(0:nstep, x, xlabel="step", ylabel="position", title="one-dimensional random walk")





nstep = 1_000
nsample = 5
Δx = rand([-1,1], nstep, nsample)
x = vcat(zeros(Int, nsample)', cumsum(Δx))
plot(0:nstep, x, xlabel="step", ylabel="position")




nstep = 1_000
nsample = 100_000
xs = zeros(Int, nsample)
for i in 1:nsample
    xs[i] = sum(rand([-1,1], nstep))
end
histogram(xs, norm=true, xlabel="position", ylabel="")



2次元ランダムウォーク

各ステップに上下左右いずれかに確率 1/4 で移動
Δ = Dict(zip(1:4, [(0,1), (0,-1), (1,0), (-1,0)]))
nstep = 10000
dx = zeros(Int, nstep, 2)
for i in 1:nstep
    n = rand(1:4)
    dx[i,1], dx[i,2] = Δ[n]
end
x = vcat(zeros(Int, 2)', cumsum(dx, 1))

plot(x[:,1], x[:,2])



各ステップごとに $\theta \in (0,2\pi)$ 方向に大きさ 1 移動
nstep = 10_000
θ = 2π * rand(nstep)
x, y = cumsum(cos.(θ)), cumsum(sin.(θ))
plot(x,y)


0 件のコメント :

コメントを投稿