忘却するノート

覚えたことを忘れるためにノートをとっています.

初期値鋭敏性とは

初期値鋭敏性.これはカオス理論の用語です.「漸化式と初期値」が与えられたときに,その初期値の僅かな違いが計算結果に大きく影響することがあります.逆に全く影響しない場合もあります.初期値の僅かなズレが,計算結果に大きく影響してくる性質のことを初期値鋭敏性といいます.カオスな関数は必ず初期値鋭敏性を持つため,カオスの指標として定番でよく使われます.

漸化式というのはこんな感じです.
x_ {n+1}=f(x_ n) 

この式は未来の値=関数(過去の値)となっていますね.過去から未来を予測できるとは素晴らしい式です.過去が決定すれば未来もわかる.漸化式と初期値を考えるのはシミュレーションによく出てくるパターンです.
Pythonによる数値計算法の基礎

初期値のわずかな誤差で,シミュレーションを更新するたびに予測誤差がどんどんでかくなったら困りますよね.初期値に加えた僅かな差が広がっていくとき,その関数は「初期値鋭敏性がある」と言えそうです.

例えばこんな関数fと初期値x_ 0はどうでしょう?

x_ {n+1}=1.1 * x_ n 
x_ 0 = 1 + \delta_ 0

誤差を\delta _0 = 0とした場合と,誤差を\delta _0 = 1に変えてみた場合で比較します.
グラフにするとこんな感じです.

import numpy as np
import matplotlib.pyplot as plt

a = np.zeros(100)
x0=1
for i in range(100):
    a[i]=x0
    x1 = 1.1*x0
    x0 = x1
    

b = np.zeros(100)
x0=2
for i in range(100):
    b[i]=x0
    x1 = 1.1*x0
    x0 = x1
    
    
plt.plot(a)
plt.plot(b)
plt.show()

f:id:tenderkilleree:20210511005915p:plain

更新するたび離れていくのがわかります.つまりこの関数fは初期値鋭敏性を持ちそうです.ちなみに「初期値鋭敏性を持っているからカオスだ」と言う人がいますが,この関数fはどうみてもカオスではありません.初期値鋭敏性を持っているからといってカオスだとはいえないのです.

 
こんな関数fと初期値x_ 0はどうでしょう?

x_ {n+1}=0.9 * x_ n 
x_ 0 = 1 + \delta_ 0

グラフにするとこんな感じです.

import numpy as np
import matplotlib.pyplot as plt

a = np.zeros(100)
x0=1
for i in range(100):
    a[i]=x0
    x1 = 0.9*x0
    x0 = x1
    

b = np.zeros(100)
x0=2
for i in range(100):
    b[i]=x0
    x1 = 0.9*x0
    x0 = x1
    
    
plt.plot(a)
plt.plot(b)
plt.show()

f:id:tenderkilleree:20210511005940p:plain

更新するたび近づくのがわかります.つまりこの関数fは初期値鋭敏性がなさそうです.同じx_ {n+1}=a* x_ nという形なのに 初期値鋭敏性が変わるわけです.実際に,係数がちがうだけで初期値鋭敏性が変わることはしばしばあります.

初期値鋭敏性をもつ有名な数式にローレンツ方程式があります.これは天気を予測する数式です.初期値がわずかに異なるだけで予測結果が全く変わってしまいます.天気の予測が難しいのはこのためです.僅かな気温,気圧の変化に敏感に影響を受けるので,もしかしたら蝶々が羽ばたくと周囲の気圧が変化して,竜巻が起こる可能性もあり得るかもしれません.これをバタフライ効果といいます.取るに足らない小さな変化が巨大な竜巻を引き起こす原因になりえるとしたら衝撃ですね.これは余談ですが,ローレンツ方程式で描かれるグラフはまるで蝶の形をしています.
カオスとフラクタル (ちくま学芸文庫)

今回は初期値鋭敏性についてかなり初歩的に話しました.厳密に初期値鋭敏性を測るにはリアプノフ指数を調べるのが良いでしょう.

タイムリープもののSF映画のなかででてくるバタフライイフェクト(Butterfly Effect)とは実は初期値鋭敏性のことを意味しています.
バタフライ・エフェクト プレミアム・エディション [DVD]