システムとモデリング

modelica, Julia, Design Structure Matrix, SysML, 他モデリング全般について。

Interact.jlでプロットをgifにする

 

 

これまでいくつかの計算モデルを静的にプロットしてきました。 今回はJuliaのパッケージInteract.jlを使って プロットをgifにしてみます。

Interactとは

インタラクティブなボタンやスライダーやテキストボックスを扱うことができるようになる ライブラリです。 今回はこのライブラリを使用して今までの記事で使用したグラフを動かしてみます。 こちらのサイトを参考にさせていただきました。

基本的には

@gif for 変数 in 始値:間隔:終値
#何らかのプロット
end

でgifを作成できます。

分岐図

以前の記事で作成した分岐図を動かしてみます。

using Plots
using LinearAlgebra

M = 200; #ステップ数
K = 1000;
N0 = 10;#初期値

global Population = zeros(M)

function recursion(r,K,M,N0)
     A = zeros(M)
     A[1] = N0
    for i = 1:M-1
        A[i+1] = A[i] + r*A[i]*(1-A[i]/K)
    end
    return A
end

p=scatter(0,0)

@gif for r in 0.1:0.1:3
Population = recursion(r,K,M,N0)
scatter!(r.*ones(20),Population[M-20+1:M],legend = false,color = "black",
xlims=(0,4),ylims=(0,1500),xlabel="r",ylabel="Population")
end
よりカオス現象がわかりやすくなったかと思います。

Cobweb Plots

この記事で紹介したCobweb plotをgifにします。

using Plots
tmax = 100
K = 1000

@gif for r in 0.1:0.1:3

Recursionx  = [i for i = 1:1200]

nextgeneration(r,K,n)= n + r*n*(1-n/K)
Recursiony = nextgeneration.(r,K,Recursionx)

n0 = 400
Cobnx = Float64[n0;n0]
Cobny = Float64[0]

push!(Cobny,nextgeneration(r,K,last(Cobnx)))

for i=1:100
    push!(Cobnx,last(Cobny))
    push!(Cobny,last(Cobny))
    push!(Cobnx,last(Cobnx))
    push!(Cobny,nextgeneration(r,K,last(Cobnx)))
end

plot(Recursionx,Recursiony,legend=:bottomright,xlabel = "n(t)", ylabel = "n(t+1)",label="Recursion")
plot!([0;maximum(Cobnx)],[0;maximum(Cobnx)],ls=:dash,label = "Diagonal")
plot!(Cobnx,Cobny,label = "Cobweb")
end

このように、簡単にgif動画が作れました。

今回はここまでにします。