ネムネコ、シンプレクティック法を使って微分方程式の数値積分をする!! [ネコ騙し数学]
かつてのネムネコ・ファミリー――某Q&Aサイト上のみでネムネコと深い交流のあったヒトたち――であるddt³さんから、シンプレクティック(Symplectic)法と呼ばれる数値計算法、微分方程式の数値積分法を教えてもらったので、バタバタとプログラムを作って計算してみた。
数値計算につかったモデルは、調和振動子
で、微分方程式は
で、t=0のときの初期条件を(q,p)=(1,0)として、1次精度のオイラー法と1次精度のシンプレクティック法を使って、この微分方程式を解いてみた。
進めるタイムステップΔt=0.1として数値的に解いた。
(1)式のHはハミルトニアンと呼ばれるもので、この場合、運動エネルギーp²/2とバネの位置エネルギーq²/2の和になる。力学的エネルギーが一定だから、(2)を数値的に解いた(q,p)をプロットすると、本来、数値解は
の円周上に存在しなければならない。
しかし、1次精度のオイラー法を用いて解いた数値解は時間の経過とともにp²+q²=1の円から離れていくんだケロよ。つまり、エネルギー保存則が満たされていない!!
軌道からどんどん離れてゆくから、時間の経過とともにエネルギーが増えていく!!
これに対し、シンプレクティック法は、多少振動するけれど、力学的なエネルギーが保存されるんだケロ。
数値積分法は、
1次精度のオイラー法だと
1次精度のシンプレクティック法だと
だけの差なのだけれど、この僅かな差でこれほど計算結果が異なるというのは正直驚きだにゃ。
ネムネコは、日々進化しているにゃ。
2017-06-29 01:55
nice!(0)
コメント(0)
トラックバック(0)
コメント 0