テント写像   - コンピュータシミュレーションの限界 | プロムナード

プロムナード

古いこと、新しいこと
いつでも、どこでも
思いつくまま、気の向くまま

以前、あるシンポジウムで東京大学先端科学技術研究センター の西成教授による渋滞学の講義を聴講している時、そこで述べられていた「テント写像」にはぶっ飛んだ。

これこそ、正しく「目からうろこ」

テント写像とは、カオス性をもつ写像のことを言うが、次の様な繰り返しをコンピュータに計算させると、とんでもない値が出るというのだ。

小生、特にコンピュータ崇拝者というわけではないが、学生の頃の専攻が電算機工学(メチャメチャ古い言い方だなぁ)だったし、その後もマイクロプロセッサ技術に拘っていたことから、コンピュータにはかなり感化されている(されてしまっている)。

とはいえ、シミュレーションのデータを盲信するほどバカではないつもりではあるが、それでもたたき出されるデータについてはかなり信じる方だろう。そんな小生だったが、コンピュータはごく単純な計算であっても、繰り返しを行う場合に間違った数字を出すことがあるということを知り、ある意味愕然とした。それがテント写像である。

例:
ある値があって、その値が0.5よりも小さければ2倍する。
その値が0.5かそれ以上であったら、その値を2倍して2から引く。
これを繰り返す。


例えば、

・ ある値が0.1とすると、その値は0.5よりも小さいので、2倍されて0.2となる
・ その値は0.5よりも小さいので、2倍されて0.4となる
・ その値、つまり0.4は0.5よりも小さいので、更に2倍されて0.8となる

・ 
の値、つまり0.8は0.5よりも大きいので、(2-0.8x2)が計算され、0.4となる
・ その値、つまり0.4は0.5よりも小さいので、2倍されて0.8となる

・ その値、つまり0.8は0.5よりも大きいので、(2-0.8x2)が計算され、0.4となる
・ その値、つまり0.4は0.5よりも小さいので、2倍されて0.8となる

・ その値、つまり0.8は0.5よりも大きいので、(2-0.8x2)が計算され、0.4となる 

こう言った処理を繰り返すと、誰が見てもわかるとおり、その後は0.4、0.8が繰り返される。 

はずなのだが。。。

実際にコンピュータでこれを繰り返して計算させると、ある回数の計算を繰り返した後に、その値が0になるというのだ。

マジすか??

そこで試しにエクセルを使って、実際に計算を繰り返させてみた。計算式は簡単だ。次のようにすればいい。

IF(ある値<0.5,2*ある値,IF(ある値>=0.5,(2-ある値*2)))

これを用いて計算を繰り返させたら、なんと途中から計算が狂いだし、56回目の繰り返し時点で、

本当に0となってしまった。






人間は、繰り返しを行っているうちに法則性を見出せるので、上の例であれば0.4と0.8が繰り返されることが判る。しかし、ひたすら計算を続けるコンピュータは、誤差を生むらしい。

こういうことを考えると、

コンピュータのシミュレーション結果は、飽くまでも予測であるということだけではなく、シミュレーションそのものに限界があるということをしっかりと認識した上で、はじき出されたデータを評価する姿勢が必要ということが理解できる。