SSブログ

ネムネコ、シンプレクティック法を使って微分方程式の数値積分をする!! [ネコ騙し数学]

かつてのネムネコ・ファミリー――某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の円から離れていくんだケロよ。つまり、エネルギー保存則が満たされていない!!

軌道からどんどん離れてゆくから、時間の経過とともにエネルギーが増えていく!!


Euler1st.png
1次精度のオイラー法を用いた数値計算結果


これに対し、シンプレクティック法は、多少振動するけれど、力学的なエネルギーが保存されるんだケロ。


Symplectic.png
1次精度のシンプレクティック法を用いた計算結果


数値積分法は、

1次精度のオイラー法だと

  

1次精度のシンプレクティック法だと

  

だけの差なのだけれど、この僅かな差でこれほど計算結果が異なるというのは正直驚きだにゃ。


ネムネコは、日々進化しているにゃ。




nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。