리키타케 어트랙터
모델 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$
설명

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

어트랙터로써는 마치 로렌츠 어트랙터의 위아래를 뒤집어 놓은듯한 형태를 하고 있다. 로렌츠 어트랙터가 째진 눈이라면 리키타케 어트랙터는 쳐진 눈과 비슷한데, 복잡도가 높지 않은만큼 리키타케 어트랙터만의 특징이랄 건 없다.
코드
다음은 리키타케 어트랙터를 시뮬레이션하는 줄리아 코드다.
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])
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 ↩︎
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 ↩︎

저희들의 저서 「줄리아 프로그래밍」이 2024 세종도서 학술부문에 선정되었습니다!

