バタフライ・エフェクトとは初期値鋭敏性の文学的表現である

要約

 バタフライ・エフェクトとは、一般には、カオス現象の初期値鋭敏性についての文学的表現です。初期値鋭敏性とは、初期状態がほんの少し違うだけで長期的な結果が全く異なる性質のことです。下図がその例です。

全体像

(1)問題の構造

 問い「バタフライ・エフェクトとは何か?」を分解すると次になります。

①バタフライ・エフェクトという表現が生まれたきっかけは何か

②そのきっかけで提示されたモデルは何か

③そのモデルのどこがバタフライなのか

(2)前提の選択

 ①②を前提として選択します。

(3)論点の選択

 ③を論点として選択します。

(4)付録一覧

 冗長さを避けて、可読性を上げるために、以下の内容は付録に回します。

「ローレンツ・カオスについてのマジでクールな動画」「Rコード」

前提

①バタフライ・エフェクトという表現が生まれたきっかけは何か

 1972年に気象学者のエドワード・ローレンツが

「予測可能性:ブラジルの1匹の蝶の羽ばたきはテキサスで竜巻を引き起こすか?」

というタイトルで講演を行いました。これがバタフライ・エフェクトの語源です。

②モデル:ローレンツ方程式

 その講演ではローレンツが1963年に発表した気象予測モデルが取り上げられました。代表的なカオス現象として有名になるモデルで、たった3本の方程式によって構成されているローレンツ方程式です。

$$\frac{dx}{dt}=-10x+10y$$

$$\frac{dy}{dt}=28x-xy-y$$

$$\frac{dz}{dt}=xy-\frac{8}{3}z$$

 変数(x,y,z)はなんらかの状態を意味し、これらは(x,y,z)の初期値が決まれば、一意に定まる決定論的モデルです。

方法

 論点は「③そのモデルのどこがバタフライなのか」でした。そのために、状態変化をシミュレーションして「バタフライ」の要素を探し出します。

結果

(1)初期値鋭敏性

 ローレンツ方程式において、初期値を

$$パターン1:(x,y,z)=(0,1,2)$$

$$パターン2:(x,y,z)=(0,1.00000001,2)$$

の2通りを設定します。パターン1パターン2には、1億分の1の差しかありません。

 これをシミュレーションすると、変数xの挙動はほぼ同じです。

しかし、時間を進めると、パターン1パターン2には致命的な差が生まれました。

 つまり、このローレンツ方程式は、初期状態にほんの少しでも違いがあれば、時間とともに差が大きくなる性質を持っています。これは初期値鋭敏性と呼ばれます。

 バタフライ・エフェクトの語源となった「予測可能性:ブラジルの1匹の蝶の羽ばたきはテキサスで竜巻を引き起こすか?」というタイトルは

・ブラジルの1匹の蝶が羽ばたく → テキサスで竜巻が起きる

・ブラジルの1匹の蝶が羽ばたかない → テキサスで竜巻が起きない

といった状況を想定してます。これはまさに初期値鋭敏性です。

 バタフライ・エフェクトとは初期値鋭敏性を意味します。

(2)ローレンツ・アトラクタ

 ちなみに、ローレンツ方程式にはもう一つ面白い性質があります。

 ここで、ローレンツ方程式の(x, y, z)の軌道を3次元座標空間上にプロットします。同じような初期状態2つ、全く異なる初期状態2つを設定します。

 それが下図です。

 2枚の円盤が組み合わさった蝶のような領域に、軌道が引き込まれている(アトラクトされている)ようです。これをローレンツ・アトラクタと言います。

 つまり、ローレンツ方程式は

・「時間tにどの点が実現するか?」は初期値に鋭敏に反応する

・「時間t=0〜Tでどの点を通ったか?(=軌跡)」は初期値に反応しない

のです。この観点からは「バタフライ・エフェクト」とは

・初期状態を変えても結局は逃れられない。アトラクターに囚われてしまう

ということの文学的表現とも解釈できます。初期値鋭敏性とアトラクターの双方に着目した日本の作品として「シュタインズ・ゲート」が挙げられます。

考察

(1)結論

 バタフライ・エフェクトとは、一般には、カオス現象の初期値鋭敏性についての文学的表現です。

 個人的には、バタフライ・エフェクトは、カオス現象に存在するアトラクタについての文学的表現という新しい解釈もありえるかなあと思っています。

(2)妥当性評価

前提評価

 前提についてはWikipediaにて「カオス理論」「ローレンツ方程式」から得た点がGoodです。

 Wikipediaから得た点がBadです。

方法評価

 バタフライ・エフェクトを単に字面で理解するのではなく、シミュレーションにて視覚化した点がGoodです。 

 シミュレーションでは単位時間あたり変化量を200分の1で刻みましたが、これが変わるとグラフも大きく変わる点がBadです。

結論評価

 蝶に帰着させた議論で一般的な表現を導けた点がGoodです。

 ローレンツ・アトラクタとバタフライ・エフェクトを結びつけたのは、原義と異なる点がBadです。

(3)意義

 バタフライ・エフェクトは次の意味を持ちます。

バタフライ・エフェクト解釈1:初期値鋭敏性

「世界が完全に決定論に従い、世界の物理モデルが解き明かされても、長期的には予測不可能な場合がある。それは初期値鋭敏性をもつカオス現象が存在し、かつ、初期状態を完全には観測できない場合である」

バタフライ・エフェクト解釈2:アトラクタ

「時間ごとの点は予測不可能でも、軌跡の予測は可能である場合がある。その場合、決定論モデルではなく、確率モデルが有用になるだろう」

付録:おすすめ動画

 この記事が面白いと思ってくださった方に、こちらの動画「ChaosⅦ 奇妙なアトラクタ (バタフライ効果 )」を激推しします。

https://www.youtube.com/watch?v=NAjxDJdue2M

付録:Rコード

シミュレーションは、R言語を用いて行いました。R言語については「しまうまのRでデータ分析入門」をご覧ください。

 図示のため、パッケージとしてggplot2、scatterplot3dを用いました。

#パッケージの呼び出し。未インストールならインストール!
library(ggplot2)  #時系列グラフ用
library(scatterplot3d) #3次元グラフ用

 シミュレーションの実行↓

a <- 10
b <- 28
c <- 8/3
T <- 30000
#モデル1の初期値
X0_1 <- 0
Y0_1 <- 1
Z0_1 <- 2
#モデル2の初期値
X0_2 <- 0
Y0_2 <- 1.00000001
Z0_2 <- 2
#モデル1の行列
data0<-  data.frame(matrix(0,T,7))
colnames(data0) <- c("time","X1","Y1","Z1","X2","Y2","Z2")
data0[1,"X1"] <- X0_1
data0[1,"Y1"] <- Y0_1
data0[1,"Z1"] <- Z0_1
data0[1,"X2"] <- X0_2
data0[1,"Y2"] <- Y0_2
data0[1,"Z2"] <- Z0_2
#シミュレーション
for(t in 1:(T-1) ){
  time <- data0[t, "time"]
  
  X1 <- data0[t,"X1"]
  Y1 <- data0[t,"Y1"]
  Z1 <- data0[t,"Z1"]  
  
  X2 <- data0[t,"X2"]
  Y2 <- data0[t,"Y2"]
  Z2 <- data0[t,"Z2"]   
  
  data0[t+1,"time"] <- time + 1
  
  data0[t+1,"X1"] <- X1 + (-1*a*X1+a*Y1)/200
  data0[t+1,"Y1"] <- Y1 + (b*X1-X1*Z1-Y1)/200
  data0[t+1,"Z1"] <- Z1 + (X1*Y1 - c*Z1)/200
  
  data0[t+1,"X2"] <- X2 + (-1*a*X2+a*Y2)/200
  data0[t+1,"Y2"] <- Y2 + (b*X2-X2*Z2-Y2)/200
  data0[t+1,"Z2"] <- Z2 + (X2*Y2 - c*Z2)/200
}

 時系列グラフの図示↓

ggplot(data0)+
  geom_line(aes(x = time, y = X2),col="red")+
  geom_line(aes(x = time, y = X1),col="black")+
  xlab("時間") + 
  ylab ("変数X") +
  scale_x_continuous(limits = c(0, 5000))+ #予測する期間を0から5000
  ggtitle ("ローレンツ・カオス 黒が現実 赤が予測") +
  theme_grey(base_family = "HiraKakuPro-W3")
#別解:モデル1のXの時系列プロット
matplot(1:(T-1),data0[1:(T-1), c("X1")], type="l",col=1,lwd = 2)

 3次元グラフの図示↓

scatterplot3d(data0$X1,data0$Y1,data0$Z1,pch = 21,xlim=(-30:30),ylim=(-30:30),zlim=(0:60)) 

コメント欄 お気軽にコメントをお寄せください!

タイトルとURLをコピーしました