로렌츠 84 시스템
모델
다음은 로렌츠-84 시스템Lorenz-84 system의 지배 방정식이다.
$$ \begin{align*} \dot{x} =& - a x - y^2 - z^2 + a F \\ \dot{y} =& - y + x y - b x z + G \\ \dot{z} =& - z + b x y + x z \end{align*} $$
파라미터
- $a = 0.25$
- $b = 4$
- $F= 5$, $G= 1$: 주로 바이퍼케이션 파라미터가 된다.
설명
로렌츠-63 그리고 로렌츠-96과 더불어서 로렌츠의 이름이 붙은 어트랙터다. 고차원 공간에서 형식만 남은 로렌츠-96과 비교해보면 로렌츠-84는 대기의 순환처럼 실제 의미가 있다고 한다.
예시로써는 여타 시스템과는 비교할 수 없을 정도로 풍부한 바이퍼케이션을 보이기 때문에 굉장히 중요한 시스템이다.
어트랙터

이상한 어트랙터를 보면 어떻게 생겼다고 형용하기가 어려울 정도로 복잡하다.
바이퍼케이션

보통 로렌츠-84를 다룰 때는 파라미터를 하나만 보는 것보단 $F, G$ 를 동시에 보아 코디멘젼-2를 다루고, 그 바이퍼케이션 다이어그램은 위와 같다.
- $H$: 호프 바이퍼케이션이 일어난다.
- $SN$: 새들-노드 바이퍼케이션이 일어난다.
- $PD$: 피리어드 더블링이 일어난다.
- $C$, $CL$: 커스프 바이퍼케이션이 일어난다.
- $BT$: 보그다노프-타켄스 바이퍼케이션이 일어난다.
코드
using DataFrames, DifferentialEquations, OrdinaryDiffEqLowOrderRK
function factory_lorenz84(FG; ic = [1.0, 1.0, 1.0], saveat = 0:1e-2:100)
F, G = FG
a, b = (0.25, 4)
function sys(du, u, p, t)
x, y, z = u
F, G = p
du[1] = -a*x - y^2 - z^2 + a*F
du[2] = -y + x*y - b*x*z + G
du[3] = -z + b*x*y + x*z
return du
end
sol = solve(ODEProblem(sys, ic, (0, last(saveat)), [F, G]), 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_lorenz84(T::Type, args...; kargs...) =
DataFrame(factory_lorenz84(args...; kargs...), ["t", "x", "y", "z", "dx", "dy", "dz"])
sol = factory_lorenz84(DataFrame, [5, 1]; ic = [1, 1, 1], 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])

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

