logo

分岐図 📂動力学

分岐図

定義

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

1

bifurcation.png

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

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

$a < 3.5$の時はある程度理解可能なパターンがあったが、その後急にカオスになり、再び周期的になり、またカオスになる。このような現象をクライシスcrisisと呼ぶ。一方で$a = 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. ↩︎