裏 RjpWiki

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

Julia でアニメーション GIF,モンテカルロ法で円周率を求める

2021年06月19日 | ブログラミング

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)

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村