ロジスティック写像

 ロジスティック写像についてすっきりとまとめたページがあります。長崎県立大学の伊藤氏のページです。まずはここを読んでみましょう。
この中で

 ロジスティック方程式と呼ばれる次の差分方程式を用いて

という部分は説明が必要でしょう。
17世紀に始まった人口の増加率に関する問題について、18世紀のマルサスの研究を経て、19世紀になってベルハルストが次のように定式化しました。
人口の増加率をdN/dtとすると
   
という2次式になるというものです。これをロジスティック方程式といいます。人口や生物の個体数は整数値ですが、これを連続的な変数とすると、この式は微分方程式であると考えられます。この微分方程式は、解析的に(つまり式変形と積分で)解くことができて、
  
という形になります。このあたりの詳細は、山口昌哉著の「カオスとフラクタル」(1986年ブルーバックス、2010年ちくま学芸文庫)に書かれています。この解のグラフを描くと次のようになります。これをロジスティック曲線といいます。Scriptは簡単ですので、係数をいろいろ変えて表示してみましょう。

なお、ウィキペディアの「ロジスティック式」の項ではこれと少し違う式になっています。
 このロジスティック方程式については1940年代の内田俊郎、森下正明(ともに京都大学)らの研究を経て、1973年のロバート・メイの式に至るのです。1970年代は電卓がポケットサイズとなり普及した時期です。

 さて、伊藤氏のページに書かれている「差分方程式」について考えます。
微分方程式を次のようにして近似化することを差分化といい、それによって得られる式を差分方程式といいます。
まず、微分の定義を思い出してください。xがtの関数であるとき、微小な変化量Δt、Δxを用いると
と定義されます。Δtが0に近い値であれば、
のとき
と近似できますので、Δx=x2−x1とすると(Δxはxの変化量すなわちx2−x1です)

となります。
 そこで、ロジスティック方程式(微分方程式)
において、

とすると
 
を得ることができます。(計算を確かめてみましょう)
これをロジスティック写像と言っています。

 さて、伊藤氏のページにある、ロジスティック写像のリターンマップ、分岐図について考えていきましょう。「カオスを概観する」でロジスティック写像として示した2つの図です。
 ここを理解するためのキーワードは「周期」です。

ロジスティック写像のリターンマップ

 先ほど得られたロジスティック写像の式において、初期値 x1 から出発してx2,x3,・・・と順次求めていきます。
たとえば a=1 のとき、初期値を x1=0.1 とすると 0.1  0.09  0.0819  0.0752 ・・・ となっていき、ある値に収束します。
この様子を調べるために、簡単なスクリプトを書いて実験してみましょう。
-------------------------------------------------------------------------
a=1;
f(x):=a*x*(1-x);
x=0.1;
repeat(20,
  print(x);
  x=f(x);
);
--------------------------------------------------------------------------
aと最初のxの値をいろいろ変えてみると、数の変化がわかります。repeat の回数を増やせばわかりやすいかもしれません。
さて、a=3.2  x=0.2 のときを調べてみると
0.2 0.512  0.7995  0.5129  0.7995  0.513  0.7995  0.513   0.7995  0.513 ・・・ となり、2つの値を繰り返します。この状態を「周期が2である」といいます。
さらに、a=3.5  x=0.2 のときは、はじめのうちはばらばらに見えますが、repeatの回数を50くらいすると、4つの値が繰り返されるようになります。「周期が4」となるのです。(実際に試してください)
ところが、a=3.5  x=0.2 のときは、まったくばらばらで周期性が見えません。
 さて、数値の並びだけではわかりにくいので、これを図で表すことにします。それがリターンマップです。
リターンマップは、Cinderellaのギャラリーにもあります。Chaotic iterarion です。しかしここは、自分で作ってみましょう。
ポイントは、あるxの値から次の値を図形的にどう取るかということなのですが、ここで直線 y=x がうまい役割をします。
次の図を見てください。


点Bが初期値を示します。それに対する f(x)=ax(1-x) の値 f(x1) が、放物線 y=ax(1-x) 上の点のy座標です。(図では a=3.3385)
ここから横に線を引いて、直線 y=x との交点を求めると、そのx座標が f(x1) となります。これが x2です。
x2からx3を求めるのも同様です。
すなわち、x軸上のx1から出発して、放物線->直線->x軸 と戻ってくれば次の値をx軸上に求めることができるわけです。
上図で、y軸上の点Aを動かすと、係数aの値を変化させることができます。
このリターンマップの作り方は別ページで解説します。( ロジスティック写像リターンマップをつくる
上図を見てわかる人は自分でスクリプトを作ってみましょう。

 さて、次の図は先ほど示した、周期が2,4になるときの図です。周期性の意味が図から読み取れるでしょうか。
(この図では、上図に加えて、x1,x2,x3・・・の点列を緑の点でx軸上に示しています。)
 右側の図はちょっと読みにくいですね。数値は確かに4周期を示していますが。このあたりの詳細も「ロジスティック写像リターンマップを作る」で考えましょう。

 さあ、いよいよテーマの「カオス」です
 今までは、a=3.2やa=3.5でした。初期値は x1=0.2 でしたが、x1=0.3 としても実は同じ結果になります。同じ結果という意味は、初期値が異ってもずっと先の方に行くと同じ値に収束したり、周期性を示したりするということです。
 ところが、a=3.57・・・ を超えると、初期値によって値の動きはまったく異なるものとなるのです。(これもやってみましょう)これを「初期値鋭敏性」と言います。そして、a=4に十分近いとき、カオスになるのです。このことは、次の「ロジスティック写像の分岐図」で見てみることにしましょう。

ロジスティック写像の分岐図

 aの値によって、xの値は収束したり、周期的になったりします。この様子を次のように図(グラフ)にします。
今度のグラフは、横軸にaの値、縦軸にxの値を取ります。そして、各aの値に対する点列 x1,x2,x3,・・・・ をプロットしていくわけですが初めの方は省略します。なぜかというと、上の周期4の図を見てください。初めの方は値がばらつくために、いろいろな線が出ています。あとのほうだけをとればはっきり周期性がわかります。(これも「ロジスティック写像リターンマップを作る」で実験しています
 このようにして作ったのが次の図です。この図では、はじめの100個をパスしてあとの100個を表示しています。aの値は0から4まで、4000等分しています。
リターンマップで実験したように、a=1までは0に収束し、1から3まではある値に収束します。前述のように、はじめの100個はパスしていますので、線が1本ということは値が一つ、つまりある値に収束しているということです。3を超えたところで2つに分岐しますね。これは2周期になっているということです。さらに4周期になり、8周期になり・・カオスになります。ただ、しばらくいくと、白く抜けるとことがあります。これを「窓」といっていますが、ここでは3周期になっています。なお、「カオスになる」というのは、「収束しない」「初期値鋭敏性がある」ということなのですが、数学的にはリー・ヨークの定理とそれによる証明をすることになります。
次がこの分岐図を描くためのスクリプトです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
f(a,x):=a*x*(1-x);
a=0;
x0=0.1;   // 初期値
repeat(4000,
  a=a+0.001;
  x=x0;
  repeat(100,x=f(a,x)); // 初めの100個は捨てる
  repeat(100,
    x=f(a,x);
    draw([a,x],size->0.05);
  );
);

// a軸目盛表示
apply(0..4,drawtext([#-0.02,-0.07],#,size->16));
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー