非線形常微分方程式

線形の常微分方程式の解は、変数の数がいくら多くても、

のどれかになります。

ところが、非線形方程式になると、たった変数3つでも、予測不可能な複雑な解になる場合があります。

Lorenz 方程式

1963年、E.N.Lorenz は大気の運動のシミュレーションを試みました。当時は、von Neumann が彼が開発したコンピュータを使って、天気予報をしようとしていた時期です。しかし、Lorenzが持っていたコンピュータ Royal MacBee の演算能力は Neumann のコンピュータにくらべて、はるかに非力なものでした。そこで、かれは、問題を思い切って単純化しました。まず、大気は一種の対流現象なので、下から暖められた空気が上昇して、上で冷やされる、という非常にシンプルな問題にしました。そして、対流のパターンは変わらないものとして、その強さだけを変数とし、対流に伴う温度のゆらぎと、上下の温度差の合計3つの変数に関する常微分方程式を導きました。それを、さらに変数変換して次のようなLorenz方程式を導いたのです。

   

この方程式は、定数 (a、b、c) と、3つの変数 x、y、z の1次の項だけでなく、xz、xy といった2次の項(非線形項)を含みます。これが、非線形常微分方程式 と言われるゆえんです。これがなければ、この方程式の解は、計算するまでもなく、だいたい想像がつきます。(z=0 で x-y平面の第一または第三象限の方向に発散します。)

ところが、彼は、この方程式の解が、定常解でも周期解でもなく、不規則に振動を続けることを発見しましたのです。たとえば、

  a=10、b=28、c=8/3

の時の解を、Euler法で積分すると、このようになります。

この解の特徴は、周期性がなく、常に不規則に振動していることです。このような状態をカオスと呼びます。「簡単な方程式からは、簡単な答えしか出てこない」または「真理は単純である」と信じられていた当時としては、この事実は衝撃的でした。

カオス状態では、初期値の違いが指数関数的に増大するという特徴があります。たとえば、初期値(x、y、z)=(0.5、0.5、0.5)とした上の計算結果と、xの初期値に 1E-14 だけ足してx=0.50000000000001 としたときの差をグラフにすると、下の図のように、2つの解の差が指数関数的に増大することがわかります。

このことから Lorenz は、「長期の天気予報は不可能である」と結論づけました。天気予報は、現在の観測値をもとに、将来を予測しますが、観測地には必ず誤差が含まれます。また、数値予報をしようとすれば、その計算過程でも誤差が生まれます。そのような誤差が指数関数的に増大すれば、いずれ予想結果が意味のないものになります。Lorenz の表現を借りれば、「アリゾナの砂漠に飛んでいる一匹の蝶が、ニューヨークに嵐がくるかどうかを決める」ということになります。これをバタフライ効果と呼びます。

2つの解の差をとって上の「バタフライ効果」の図を描くには、たとえば、

  1. Sheet1全体を選択してコピーし、Sheet2にペーストする。
  2. Sheet2の初期値を変える。
  3. Sheet3にSheet1とSheet2のx、y、zの差をとる。(=Sheet1!B4-Sheet2!B4)
  4. 差の絶対値(Δx2+Δy2+Δz20.5を計算してグラフに描く。

とします。

なお、この図からExcelは十数桁の精度で計算していることがわかります。普通にプログラミングして計算するときの精度(単精度)は約7桁ですが、倍精度では十数桁の精度になります。Excelは常に倍精度で計算しているようです。