R には動画画像ファイルの作成のために animation ライブラリがあるが,Julia にも動画 gif ファイルを作成する機能がある。
試しに,モンテカルロ法で π を求める動画を作ってみた。
以下は,2つの gif ファイルを左右に並べて表示しているので(環境によっては上下になっているかも知れない)双方で同期が取れていないのだが,これを一つのファイルにする方法がわからない。色々やってみたのだけど,どれも旨くいかなかった。やりかたをご存じの方お教えくださればうれしいです。
using Random, Plots
function MonteCarlo(n = 100)
Random.seed!(777)
x = range(0, 1, length=1000)
y = @. sqrt(1-x^2);
xy = rand(n, 2);
r2 = vec(sum(xy .^ 2, dims=2));
inout = (r2 .< 1) .+ 0;
cumpi = cumsum(inout) * 4 ./ collect(1:n);
pyplot(grid=false, label="", size=(300, 300))
plt = plot(x, y, color=:black, xlims=(0, 1.01), ylims=(0, 1), aspect_ratio=1)
plt = plot!([0, 1, 1, 0, 0], [0, 0, 1, 1, 0], color=:black)
anim = @animate for i = 1:div(n, 4) * 4
plt = scatter!([xy[i, 1]], [xy[i, 2]],
color= inout[i] == 1 ? :red : :blue, markerstrokewidth=0)
end
gif(anim, "MonteCarlo.gif", fps=10)
yrange = extrema(cumpi).+ (-0.1, 0.1)
plt2 = plot([0, n], [π, π], color=:black, ylims=yrange,
xlabel="number of trial", ylabel="approximated value")
#plt2 = plot!([0, 0], [yrange[1], yrange[2]], color=:black)
#plt2 = vline!([0], color=:black)
plt2 = hline!([π], color=:blue)
anim2 = @animate for i = 2:div(n, 4) * 4
plt2 = plot!([i-1, i], [cumpi[i-1], cumpi[i]], color=:black)
end
gif(anim2, "MonteCarlo2.gif", fps=10)
end
MonteCarlo(300)