2次関数族のカオス

初期値鋭敏性

写像 f(x)について，f\(TraditionalForm\`\(\(\ \)\(\&n\)\)\)(x)=f ( f ( f (...f (x))))を調べるたいときは，Nest 関数やNestList 関数を用いる．ここでは，f ( x ) = λ x ( 1 - x ) として，そのカオス性を考えることにする．（次の例を入力し，動作を確認せよ．）

lambda = 4;
quad[x_] :=  lambda x (1 - x);

Nest[quad, x, 
      1]        
Nest[quad, x, 
      2]        
\(Nest[quad, x, 
      3]\ \ \ \  (*\ 説明\ \ quad \((quad \((quad \((x)\))\))\)\ *) \)

一度に出力したいときは，NestList 関数を用いる．使用法は次を入力すれば明らかであろう．

NestList[quad, x, 3]

f\(TraditionalForm\`\(\(\ \)\(\&n\)\)\)  (x) は，初項 x ，漸化式 (Subscript[a, n + 1])= λ (Subscript[a, n])(1 - (Subscript[a, n])) = f ((Subscript[a, n])) により与えられる数列と思うことができる．この意味で，NestList[quad, x, 3] の x は初項に対応している．カオス性とは，乱暴にいって，この初期値を少し変えると，その後の軌道 f \(TraditionalForm\`\(\(\ \)\(\&n\)\)\)(x) が大きく変わってしまう現象をいう（初期値鋭敏性）．これを見るために，次を実行せよ．

NestList[quad, 0.2, 30]
NestList[quad, 0.3, 30]

カオス性を実感できただろうか．普通はこれでは何もわからないので，グラフを書いてみることにする．

ListPlot[NestList[quad, 0.2, 30]]
ListPlot[NestList[quad, 0.3, 30]]

まだ，いっこうに感じがでてこないので，折れ線グラフを書いてみることにする．
（プログラムの説明　t 1 [[ j ]] はリストの j 番目を表す．従って，y1 [ j ] は{ j , (Subscript[a, j])}になり，a1 はそれを並べた{{1,(Subscript[a, 1])},{2,(Subscript[a, 2])},...} となる．これをLine 命令により表示している．）

t1 := NestList[quad, 0.2, 30];
x1[j_] := t1[[j]];
y1[j_] := {j, x1[j]};
a1 = Array[y1, 30];
t2 := NestList[quad, 0.3, 30];
x2[j_] := t2[[j]];
y2[j_] := {j, x2[j]};
a2 = Array[y2, 30];
Show[Graphics[ {RGBColor[0, 0, 1], Line[a1]}], 
      Graphics[{RGBColor[1, 0, 1], Line[a2]}],  
      Axes -> True]

グラフから，初期値に鋭敏な感じがしてきただろうか．次に，これを詳しく見るため位相推移性について考える．

位相推移性

位相推移性と周期点の稠密性があれば，初期値鋭敏性が成り立つことが証明されている．そこで，この節では，この位相推移性を見ることにする．ここで，位相推移性とは，集合 {(Subscript[a, 0]), (Subscript[a, 1]), (Subscript[a, 2]),...}が区間 [0,1] で稠密になっているような初期値 (Subscript[a, 0]) が存在する時をいう．稠密であるとは，集合がぎっしり埋まっている状態なので，グラフに描けば，これらの点で真っ黒になる筈である．

始めに，数列 { (Subscript[a, n])}の表示法について考える．

lambda = 4;
quad[x_] :=  lambda x (1 - x);
a[n_] := Nest[quad,  0.2,  n]

g1 = Graphics[Plot[quad[x], {x, 0, 1}]];
g2 = Graphics[Plot[x, {x, 0, 1}]];
g3 = 
        Graphics[
          Line[{{a[0], 0}, {a[0], a[1]}}]];
g4 = 
        Graphics[
          Line[{{a[0], a[1]}, {a[1], a[1]}}]];
g5 = 
        Graphics[
          Line[{{a[1], a[1]}, {a[1], 0}}]];
Show[g1, g2, g3, g4, g5,  
        AspectRatio ->  Automatic];
Print["a[0]=", a[0], ", a[1]=", a[1]]

(Subscript[a, 1]) は，(Subscript[a, 0])を通る垂線と y = quad[x]の交点，この点を通る水平線と y=x の交点，さらに，この点の x 軸への足を取ることで求められる．この操作を順に行っていけば (Subscript[a, n])が求められることになる．

これを自動的に行うのが次のプログラムである．

makeLines[x_] := {Line[{{x, x}, {x, quad[x]}}], 
          Line[{{x, quad[x]}, {quad[x],  
                quad[x]}}]};
g1 = Graphics[Plot[quad[x], {x, 0, 1}]];
g2 = Graphics[Plot[x, {x, 0, 1}]];
g3 = 
        Graphics[
          Map[makeLines,  
            NestList[quad, 0.2, 100]]];
Show[g1, g2, g3,  AspectRatio ->  Automatic];

初期値 0.2 と回数 50 を増やすことで，{(Subscript[a, 0]),(Subscript[a, 1]),(Subscript[a, 2]),...}が稠密になることを実感してもらいたい．

周期点の稠密性

前の節で，位相推移性について見た．この節では，カオス性のもう一つの側面である．周期点の稠密性について考える．

点 x が周期点であるとは，f \(TraditionalForm\`\(\(\(\ \)\(\&n\)\)\(\ \)\)\)(x) = x となる自然数 n が存在するときをいい，そのような n の最小値を周期という．ここで，n が１の場合を特別に固定点ともいう．

周期点の稠密性とは，このような周期点が区間 [0,1] で稠密になるときをいう．それでは，周期点を具体的に表示してみることにする．

周期１の周期点は，f (x) = x を満たす．従って，x が周期１の周期点であれば，それはグラフ y = f (x) とグラフ y = x の交点の x 座標になる．

Plot[{quad[x], x}, {x, 0, 1}]

同様に，周期 n の周期点はグラフ y = f \(TraditionalForm\`\(\(\ \)\(\&n\)\)\) ( x )とグラフ y = x の交点の x 座標になる．

Print["\:5468\:671f2\:306e\:5468\:671f\:70b9"];
Plot[{Nest[quad,  x, 2], x}, {x, 0, 
          1}];
Print["\:5468\:671f3\:306e\:5468\:671f\:70b9"];
Plot[{Nest[quad,  x, 3], x}, {x, 0, 
          1}];
Print["\:5468\:671f4\:306e\:5468\:671f\:70b9"];
Plot[{Nest[quad,  x, 4], x}, {x, 0, 1}]

周期点がだんだんと増えていく様子を見てもらえただろうか．具体的に周期点を求めるには，次のようにすればよい．

NSolve[Nest[quad, x, 2] == x, x]

NSolve[Nest[quad, x, 3] == x, x]

Mathematica には，FixedPoint という関数もあって，自動的に固定点を計算してくれるが，実際に使ってみると，時間がかかって実用的ではない（このほか，マーチン・ガードナーの方法とかが知られているが，ここでは取り上げないことにする）．

下のプログラムを打ち込むと，下図のような軌道図がかける（少々時間がかかる）．このグラフでは， x 軸をλ とし，y 軸にその漸近軌道を表示したものである（５００回目以降の軌道のみを表示している）．λ が 4 のとき，状況が大きく変わる様子を見ることができる．

Clear[lambda];
quad[x_] :=  lambda x (1 - x);
ListPlot[
        Flatten[Table[
            Transpose[{Table[lambda, {129}],  
                NestList[quad,  Nest[quad, 0.5, 500],  128]}], {lambda, 0, 
              4, 0.01}], 1],  
        PlotStyle -> PointSize[0.001]];

課題　
(1) 漸化式 (Subscript[a, n + 1])= λ (Subscript[a, n])(1 - (Subscript[a, n])) = f ((Subscript[a, n]))  (λ = 2.9，(Subscript[a, 0])= 0.1 ) により与えられる数列につい
     て，次の問に答えよ．
     (a) x 軸に n, y 軸に (Subscript[a, n])を表示する折れ線グラフを描け．
     (b) 数列 {(Subscript[a, n])} の表示法（「位相推移性」）を用い，(lim_(n -> ∞))(Subscript[a, n])を表示し，また，
          その値を求めよ．
(2) f (x) = π sin π x について，周期２の周期点が [0,1] 内にいくつあるかを求めよ．
(3) （発展問題）
      f(x)=a (x-c) +1 (0<x<c), f(x)=a (x-c) (c<x<1)をParry map という．a=1.2, c=0.6とする
    とき，周期４の周期点と，周期５の周期点を求めよ．