logo

리키타케 어트랙터 📂동역학

리키타케 어트랙터

모델 1

다음은 리키타케 어트랙터Rikitake attractor의 지배 방정식이다.

$$ \begin{align*} \dot{x} =& -\mu x + y z \\ \dot{y} =& -\mu y + (z - a) x \\ \dot{z} =& 1 - x y \end{align*} $$

파라미터

  • $a = 1.7$
  • $\mu = 0.7$

설명

alt text

리키타케라는 이름은 언뜻 낯설지만 실제로 츠네지 리키타케라는 일본의 지구물리학자에게서 유래했다. 두 개의 원판을 이용한 발전기와 관련이 있다는데, 실제로 리키타케의 논문을 보면 전류와 저항에 대한 상미분방정식으로써 유도되는 과정이 있다2.

어트랙터

alt text

어트랙터로써는 마치 로렌츠 어트랙터의 위아래를 뒤집어 놓은듯한 형태를 하고 있다. 로렌츠 어트랙터가 째진 눈이라면 리키타케 어트랙터는 쳐진 눈과 비슷한데, 복잡도가 높지 않은만큼 리키타케 어트랙터만의 특징이랄 건 없다.

코드

다음은 리키타케 어트랙터를 시뮬레이션하는 줄리아 코드다.

using DataFrames, DifferentialEquations, OrdinaryDiffEqLowOrderRK

function factory_rikitake(μ::Number; ic = [0.1, 0.1, 0.1], saveat = 0:1e-2:100)
    a = 1.7
    function sys(du, u, p, t)
        x, y, z = u
        μ = p[1]

        du[1] = -μ*x + y*z
        du[2] = -μ*y + (z - a)*x
        du[3] = 1 - x*y
        return du
    end
    sol = solve(ODEProblem(sys, ic, (0, last(saveat)), [μ]), RK4(), dt = saveat.step.hi, adaptive=false, maxiters = Inf)
    dsol = [sol.k[2][1] stack([solk[2] for solk in sol.k[2:end]])]
    matrix = [sol.t sol[:, :]' dsol']
    return matrix[sol.t .≥ first(saveat), :][1:end-1, :]
end
factory_rikitake(T::Type, args...; kargs...) =
DataFrame(factory_rikitake(args...; kargs...), ["t", "x", "y", "z", "dx", "dy", "dz"])


sol = factory_rikitake(DataFrame, 0.7, saveat = 900:1e-2:1000)
plot(sol.x, sol.y, sol.z, alpha = .5, color = :black, xlabel = L"x", ylabel = L"y", zlabel = L"z", size = [400, 400])

  1. Llibre, J., & Messias, M. (2009). Global dynamics of the Rikitake system. Physica D: Nonlinear Phenomena, 238(3), 241-252. http://dx.doi.org/10.1016/j.physd.2008.10.011 ↩︎

  2. Rikitake T. Oscillations of a system of disk dynamos. Mathematical Proceedings of the Cambridge Philosophical Society. 1958;54(1):89-105. https://doi.org/10.1017/S0305004100033223 ↩︎