Julia の Jupyter 環境などでは Interact package を使うと,パラメータをマウスでコントロールしながら計算などを行わせることができる. これを試してみよう.
まずは Package の使用宣言だ.ちなみに,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
動作を確認しておこう.
result = logistic(1.2, 50)
using Plots
gr()
plot(result, marker = :circle)
確かに人口問題っぽい変化をしていることがわかる.
Interact の使い方は,@manipulate マクロに続けて for 文を書けば良い.
通常だと for 文はその中身がループするが,@manipulate がついているときはループせずに,for で指定されている数量などが画面で制御できるようになる.
まあ,例で見てみたほうがわかりやすいだろうから,以下の例を見てみよう.
@manipulate for a in 0:0.01:4
plot( logistic(a,100), marker = :circle)
end
表示されるスライダをマウスで掴んで,左右に動かしてみよう. 特に,$a$ の値が、「1の前後」「2.3? あたりの前後」「3.56? あたりの前後」で本質的な変化が起こるので,よくよく見てみよう.
ちなみに,for 文で制御する変数は複数でも良い.以下の例を見てみよう.
@manipulate for a in 0:0.01:4, num in 10:300
plot( logistic(a,num), marker = :circle)
end