ホモクリニック軌道とヘテロクリニック軌道
定義1
ホモクリニック
ある固定点 に対して次を満たす を ホモクリニック軌道homoclinic orbit と呼ぶ。
ヘテロクリニック
ある2つの固定点 に対して次を満たす を ヘテロクリニック軌道heteroclinic orbit と呼ぶ。
説明
名前の通り、ホモクリニック軌道は時間が前に流れても後ろに流れても同じ固定点に向かっていくので、ホモhomoという接頭辞が付き、ヘテロクリニック軌道は他の固定点に向かうので、ヘテロheteroという接頭辞が付く。
定義で直接的に言及していないが、ホモクリニック軌道は に向かいながらも出る経路があるため、サドルとなり、ヘテロクリニック軌道は出る側が の視点で見ると不安定マニホールドで、入る側が の視点で見ると安定マニホールド になる必要がある。
視覚化
ヘテロクリニック軌道は単に1点から別の1点に流れるイメージなので想像しやすいが、閉曲線でありサドルを含むホモクリニック軌道を直感的に思い浮かべるのは簡単ではない。
例として、上記のシステムで 及び としたとき、システムで現れるホモクリニック軌道のみを視覚化してみよう2 3。
軌道内部の初期点からフローを動画として描くと次のようになる。
コード
次はこの記事で使用されたデータを生成する ジュリア コードだ。
using Plots, LinearAlgebra
μ = -1.755
h = 0.1
f(v) = [v[1] + v[2], μ*v[2] + v[1]^2 - v[1]*v[2]]
pos = Base.product(-1.5:h:.5, -.5:h:2)
dir = f.(pos) ./ 10norm.(f.(pos))
v_ = [[-0.5,0.5]]
for _ in 1:500000
push!(v_, v_[end] + 0.0001f(v_[end]))
end
truncated_v_ = v_[340000:460000]
p1 = quiver(first.(pos), last.(pos), quiver = (first.(dir), last.(dir)),
xlabel = "x", ylabel = "y", color = :gray, size = [600, 600])
p1 = plot(p1, first.(truncated_v_[1:60000]), last.(truncated_v_[1:60000]), color = :black, lw = 2, label = "orbit", arrow = true)
p1 = plot(p1, first.(truncated_v_[60001:80000]), last.(truncated_v_[60001:80000]), color = :black, lw = 2, label = :none, arrow = true)
p1 = plot(p1, first.(truncated_v_[80001:90000]), last.(truncated_v_[80001:90000]), color = :black, lw = 2, label = :none, arrow = true)
p1 = plot(p1, first.(truncated_v_[90001:120000]), last.(truncated_v_[90001:120000]), color = :black, lw = 2, label = :none, arrow = true)
p1 = scatter(p1, [0], [0], color = :black, label = "saddle node", shape = :rect)
png(p1, "saddle_orbit.png")
anim = @animate for tk in 1:1000:460001
plot(p1, first.(v_[1:100:tk]), last.(v_[1:100:tk]), lw = 1, color = :blue, label = :none, arrow = true)
end
mp4(anim, "saddle_orbit.mp4", fps = 30)