logo

分岐図 📂動力学

分岐図

定義

動力学系でパラメーターの変化によって生じる変化、バイファーケーションを表した図をバイファーケーション・ダイアグラムbifurcation Diagramと呼ぶ。

1

bifurcation.png

例としてロジスティック・ファミリー xn+1=axn(1xn) x_{n+1} = a x_{n} \left( 1 - x_{n} \right) を考えると、パラメーターaaの変化により十分に大きいNNに対してxNx_{N}の値は、次のバイファーケーション・ダイアグラムの黒い範囲内に含まれると予想できる。1<a<31<a<3の時は一本の線で表されておりxNx_Nは一つの固定点に留まり、3<a<3.43 < a < 3.4の時は二本の線があるためxNx_{N}はそのうちの一つの値になるだろう。そのうちの一つの値になるということは、xnx_{n}が周期-22オービットに含まれているということだ。そしてa=3.4a = 3.4くらいから周期-222^2オービットが現れる。

このセンスで、この図を分岐図と呼ぶことは妥当に見える。一方で3.6<a3.6<aは黒い範囲が徐々に広がりa=4a=4では00から11までの全ての値を取りうるようになる。これはロジスティック・マップがカオスであることを視覚的かつ実験的に示している。この意味で、どんな動力学系を理解しようとする時、そのバイファーケーション・ダイアグラムを見ることができるというのは非常に良いことである。

a<3.5a < 3.5の時はある程度理解可能なパターンがあったが、その後急にカオスになり、再び周期的になり、またカオスになる。このような現象をクライシスcrisisと呼ぶ。一方でa=3.8a = 3.8近くの周期的な区間を周期的ウィンドウperiodic windowと呼ぶ。

コード

以下はロジスティック・ファミリーのバイファーケーション・ダイアグラムを描くJuliaのコードだ。

function logistic(r, x)
    return r * x * (1 - x)
end
logistic(4, 0.5)

function iter(f, p, x0, n)
    x = [x0]
    for t in 1:n
        push!(x, f(p, x[end]))
    end
    return x
end
traj = iter(logistic, 3, 0.5, 100)

using Plots, LaTeXStrings
plot(traj)

function bifurcation(h)
    xaxis_ = []
    yaxis_ = []
    for r ∈ 1:h:4
        preiterated = iter(logistic, r, 0.5, 200)[101:end]
        xaxis_ = [xaxis_; fill(r, length(preiterated))]
        yaxis_ = [yaxis_; preiterated]
    end
    return xaxis_, yaxis_
end

# @time xaxis, yaxis = bifurcation(0.01)
# diagram = scatter(xaxis, yaxis, markersize = 0.1, markeralpha = 0.5, legend = false, xlims = (1, 4), ylims = (0, 1))
@time xaxis, yaxis = bifurcation(0.001)
diagram = scatter(xaxis, yaxis,
xlabel = L"a", ylabel = L"x",
markersize = 0.1, markeralpha = 0.5, legend = false, xlims = (1, 4), ylims = (0, 1));
png(diagram, "bifurcation.png")

  1. Yorke. (1996). CHAOS: An Introduction to Dynamical Systems: p19. ↩︎