2016/01/31

微分方程式のシュミレーション

今日から数回に渡り,田浦健次朗氏がお書きになったWikimediaの5つの記事を紹介したいと思います。動機はそこに書かれている数式が氏の思惑どおりに表示されないことでした。原文そのままに転載いしたします。

  • 微分方程式のシュミレーション
  • 数学を生き生きと理解するためのプログラミング
  • 乱数(試行)を用いた計算やシミュレーション
  • 機械学習(例からの関数近似または補間)
  • 4色定理とコンピュータ

1. 微分方程式のシュミレーション

物理や化学,様々な工学の分野の問題は微分方程式(wikipedia)を解く事に帰着される.その理由は,自然の様々な現象の根本的な法則が微分方程式を用いて記述される事に起因する.たとえば高校の物理では,ニュートンの運動方程式
\[m a = F\,\]
を習うが,これは質点の動きを支配する方程式である(剛体や流体も質点の集まりとしてその支配方程式が導かれる).ここで$ a\,$は加速度,つまり質点の位置を時間で2階微分したもの. $F\,$は一般に質点の位置や速度(つまり位置を時間で一階微分したもの)の関数として書けるため上記は質点の位置時間の関数)を未知の関数とした方程式, つまり微分方程式になる.
バネにつながれたおもりが単振動をするのも, 太陽のまわりをまわる惑星が楕円軌道を描くのも, すべてここから導かれる.前者の微分方程式は,
\[m \ddot{x} = - k x\]
後者は,
\[m \ddot{x} = - G \frac{mM}{|x|^2}\]
である.その他に,回路の方程式,化学反応中の分子の量,なども同じくらい簡単な方程式で記述される.
コンピュータはこれらの微分方程式を「解く(=その関数を時間の関数として求める)」のに驚くほど簡単で統一的な方法を使う. (常)微分方程式は一般に

                                            ある量$x(t)\,$の微分(時間変化)=$x(t)\,$の関数

数式で書けば,
\[\dot{x}(t) = G(x(t))\]
という形をしている(説明は省略するが,元の方程式に2階以上の微分係数が含まれていても,結局はこの形に変形できる). これを解くとは,この式を満たす関数 $x(t)\,$ を求めることに他ならない. そのためにコンピュータでは,与えられた初期値 $x(0)\,$ から出発して,「ほんの少し時間がたったときの状態」を繰り返し求めていく. つまり,
\[x(t + h) \approx x(t) + \dot{x}(t) h = x(t) + G(x(t))\] という式(最初の$\approx\,$は微分係数の定義,次の等号は,微分方程式そのものによる)を使って,
\[
 \begin{array}{rcl}
x(h) & = & x(0) + G(x(0)) h \\
x(2h)& = & x(h) + G(x(h)) h \\
x(3h)& = & x(2h) + G(x(2h)) h \\
\ldots
\end{array} \] という計算を順に行う事で, $x(t)\,$ という関数の概形を求めていく.これを実行するプログラムは行数にして10行もあれば書ける.しかもこのやり方は $x\,$ が単なる実数であろうと,ベクトルであろうと,まったく同様に使える.
もちろん上記の式は正確には「近似式」であり,正確ではない.したがって方程式の「正確な」解からはある程度の誤差がある.また, 答えが sin, cos のようなよく知った関数で書けたとしても,解が sin/ cos そのものであるということまで教えてくれるわけではない. その意味で微分方程式の階が「本当に分かった」という知的満足度は,実際に答えを式で求める場合と比べて低いのかもしれない.
しかし,この驚くほど単純な方法はほとんど微分方程式の「形」によらず適用できるという強みがある.つまり手計算によって「解ける」微分方程式は非常にその範囲が限られており,解ける・解けないの境目が非常に細かい式の形に依存しているのに対し,ここで述べた解法は,右辺の形がある程度「まともな」関数であれば常に適用できることが期待される.そして実際の物理や工学で現れる微分方程式はほとんどの場合複雑で,答えを閉じた式として求めることは期待できない.さらにそもそも,「閉じた式」で求まるとは,解がたまたまよく知っている関数の組み合わせで書けるという事を意味するだけであって,解が閉じた式で求まる場合を特に有り難がる理由もないということになる.
数値的な解法は微分方程式が複雑になり混み入るほど有難い解法となる.例えば銀河は非常に多数の星の集まりで,そのような多数の星の集まり全体の動きも,星や星間ガスなどの質量の間の万有引力が支配している.この解が閉じた式として求まるということは期待すべくもないが,コンピュータによる数値的な近似解であれば,「原理的には」巨大な連立の微分方程式の解を求める事で求められると期待できる.それがうまく行けば,なぜ銀河はあのような渦巻き形をしているのか,銀河の行く末はどのようになるのか,などが理解できるようになると期待される(もちろんそれは非常に難しい問題であり,基本的なやり方を理解するだけですぐにできるという意味ではない).
File:Galaxy.png
式の形はどんどん難しくなるが,電磁気学のマックスウェル方程式,量子力学のシュレディンガー方程式,熱力学の熱伝導方程式,波動方程式,流体の動きを記述するナビエストークス方程式などもすべて(偏)微分方程式である.
これほど多様な現象に対する解が,同じ原理で求まるというのは非常におもしろいと思うのだがどうでしょうか? また,私にとっては現象を「理解する」ないし「分かったような気がする」ために,それをシミュレートするプログラムを書いてみる,そして,起こるべき事が起こるかどうかを確かめてみるというのは,非常に良い手段のように思われます.より基本的な法則から難しい方程式を導いたり,あるいはシュレディンガー方程式のように「これが法則だ」と言って与えられても,私のような)凡人にはなかなか「理解」した気にはなれないものです.どうなれば「理解」したことになるかは難しいところですが,やはりそれを用いて現象を予測するなどして,実際に使っているうちに各項が果たす意味のようなものが分かってくるのではないでしょうか.しかし実際には解析的に予測できる現象はなかなか少ないですし,できたとしてもむしろ式変形の難しさに埋没されてしまいがちです.数値的に解を求め,それが「それらしい」解であることを確かめることができれば,印象にも残りますし,使っているのは数式だけですから,微分方程式だけから確かにその現象が「導かれた」という感覚が自然に湧き上がって来ます.この後物理や化学で出てくる数々の微分方程式に対し,それをコンピュータにシミュレートさせてみようという動機を持つと(持っていたら),それらをより面白く学べる(た)のではないかと,思います (括弧内は,自分の事を言っています).
おすすめの本:
微分方程式によって色々な現象がモデル化できるということを説明したわかりやすい本
表計算ソフトExcel(だけ)で,微分方程式をはじめとするシミュレーションができてしまうという本.実は類似の本は多数あるので生協などで探索してみると良い.授業でもさわりを課題として取り上げる予定.

出典Motivation to learn computer

0 件のコメント :

コメントを投稿