바이퍼케이션 다이어그램
정의
동역학계에서 파라미터의 변화에 따라 나타나는 변화, 바이퍼케이션을 나타낸 그림을 바이퍼케이션 다이어그램bifurcation Diagram이라 한다.
예시1
예로써 로지스틱 패밀리 $$ 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라 한다.
코드
다음은 로지스틱 패밀리의 바이퍼케이션 다이어그램을 그리는 줄리아 코드다.
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")
Yorke. (1996). CHAOS: An Introduction to Dynamical Systems: p19. ↩︎