logo

ロスラー・アトラクタ 📂動力学

ロスラー・アトラクタ

概要

ロスラー方程式rössler equationは、シンプルだけどカオスアトラクターを持っていると紹介されたシステムの一つである。

システム1

$$ \begin{align*} {{dx} \over {dt}} =& - y - z \\ {{dy} \over {dt}} =& x + ay \\ {{dz} \over {dt}} =& b + (x-c) z \end{align*} $$

変数

  • $x(t)$: $t$時点の粒子の$x$座標を表す。
  • $y(t)$: $t$時点の粒子の$y$座標を表す。
  • $z(t)$: $t$時点の粒子の$z$座標を表す。

パラメーター

  • $a,b,c$: 直感的な意味を持たない。

これらのパラメーターは通常、$a = 0.1$、$b = 0.1$、$c = 14$として設定されることが多い。

説明

rossler.gif

カオスと言えば、ローレンツ・アトラクターが絶対に外せないが、名声で次ぐのはこのロスラー方程式で、常微分方程式の中である。数式的にはローレンツ方程式よりも簡単で、対称性を持たない特徴がある。

rossler.svg

軌道を見ると、最初は原点周辺でスパイラルを描きながら回っているように見えるが、$t=50$を超えると突然$z$軸へ跳ねることが確認できる。ロスラー・アトラクターでは、これらの跳ねるタイミングや高さを全く推測できないところがカオスらしい。

コード

以下は上の図を再現するジュリアコードである。

using Plots
using OrdinaryDiffEq

function Rössler!(u, p, t)
    x, y, z = u
    a, b, c = p

    ẋ = -y -z
    ẏ = x + a*y
    ż = b + (x - c) * z
    return [ẋ, ẏ, ż]
end

u0 = [1.0, 1.0, 1.0]
tspan = (0.0, 100.0); dt = 0.01
p = (0.1, 0.1, 14)

prob = ODEProblem(Rössler!, u0, tspan, p)
sol = solve(prob, RK4(), saveat = dt)

plot(
    plot(sol, idxs = (0,1), title = "x"),
    plot(sol, idxs = (0,2), title = "y"),
    plot(sol, idxs = (0,3), title = "z"),
    plot(sol, idxs = (1,2,3), title = "Trajectory"),
    legend = :none, size = (800,800)
)
savefig("rossler.svg")

anime = @animate for t in 1:10:10000
    plot(sol[1:t], idxs = (1,2,3),
      lw = 2, alpha = (1:t)/t, color = :black, size = (400,400), legend = :none,
      xlims = (-25,25), ylims = (-25,25), zlims = (0,30))
end
gif(anime, "rossler.gif", fps = 30)

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