Package “Interact” を使ってみよう
Julia の Jupyter 環境などでは Interact package を使うと,パラメータをマウスでコントロールしながら計算などを行わせることができる. これを試してみよう.
まずは Package の使用宣言だ.通常環境の場合でインストールしてない人は、Pkg.add("Interact")
しておく必要がある.
ちなみに,JuliaBox はこのパッケージはデフォルトでインストールされているので,自分でインストールしなくても良い(しようとすると失敗する).
using Interact
ロジスティック写像
試してみる対象として,ロジスティック写像を用いてみよう. これは初期値 $0 < u_0 < 1$ に対して
$u_{n+1} = a u_n ( 1- u_n ),$ $n=0,1,\cdots$
で表される写像で,パラメータ $a$ が 1 より少しだけ大きいときは,人口問題のロジスティックモデルの微分方程式の近似になっている式である. 逆に言えば,$a$ が 1 からずれていくとロジスティックモデルからずれていくということだ.
初期値を 0.01 として,パラメータ $a$ と,得られる数列の長さ $num$ を与えるとロジスティック写像によって得られる数列を返すような関数を用意しておこう.
function logistic(a, num)
u0 = 0.01
u = u0
u_sq = [ u0 ]
for i in 1:num
u = a*u*(1-u)
push!(u_sq, u)
end
return u_sq
end
動作を確認しておこう.
using Plots
gr()
plot( logistic(1.2, 50), marker = :circle )
とすると、次のようなグラフが出てくる.
確かに人口問題っぽい変化をしていることがわかる.
Interact を試してみる
Interact の使い方は,@manipulate マクロに続けて for 文を書けば良い.
通常だと for 文はその中身がループするが,@manipulate がついているときはループせずに,for で指定されている数量などが画面で制御できるようになる.
まあ,例で見てみたほうがわかりやすいだろうから,以下の例を見てみよう.
@manipulate for a in 0:0.01:4
plot( logistic(a,100), marker = :circle)
end
とすると、下のように、変数 $a$ をリアルタイムで変えられる「スライダ」がついた状態でグラフが出てくる.
表示されるスライダをマウスで掴んで,左右に動かしてみよう.特に,$a$ の値を大きくしていくと本質的な変化が起こるので,それを見てみると良い.
ちなみに,for 文で制御する変数は複数でも良い.以下の例を見てみよう.
@manipulate for a in 0:0.01:4, num in 10:300
plot( logistic(a,num), marker = :circle)
end
とすると、以下のように、スライダが2つ出てくる.
他にも、数字を変えるだけでなく、関数などをリアルタイムで切り替えることも可能だ.
気になる人は、Interact Package の配布 web を見てみよう. ただし、例として挙がっている Julia code の文法は多少古いようなので、今風に読み替える必要があるかもしれないのでそこは気をつけよう.