読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(36) 分岐とFeigenbaum定数

離散力学系について考えます。(本質的にロジスティック写像と同じ)以下の写像を対象にします。

例えば、c=1.23の時、初期値x=0から始めるこの繰り返し写像は2点からなる周期解に収束します。
これを見ておきましょう。

/* 6.3.2m */
load("dynamics")$

evolution(y^2-c, 0, 50), c : 1.23$


使用した機能


cを変化させた時、周期解に現れる点の数がどうなるか見てみましょう。

/* 6.3.3m */
orbits(y^2 - c, 0, 100, 100, [c, 0.5, 2, 0.005], [style, dots]);


使用した機能


cを増やすに連れて周期解に現れる点の数が増えていきます。点の数が変わるcの値を分岐点と呼びます。
例えば、を求めてみましょう。

/* 6.3.5m */
clow : 1.2$
chigh : 1.3$
pre : 0$
c : 1$
while true do (
  pre : c,
  c : (clow + chigh) / 2,
  x : 0,
  for j : 1 thru 1000 do x : x^2 - c,
  y : [],
  for j : 1 thru 100 do (
    x : x^2 - c,
    yv : round(300*x)/300,
    if not member([c, yv], y) then y : endcons([c, yv], y)
    ),
  if length(y) <= 2 then clow : c else chigh : c
  )$
print(c, " ", length(y))$

使用した機能

同様にして、を求めると、


極限値4.6992016091029909...はFeigenbaum定数として知られています。
上記計算で求めた値から計算しておきます。