4 Numerical Integration
4.1 Integration of ODE
何か物理系が、変数の組
我々は、時刻
これを形式的に積分すると、任意の時刻
さて、右辺の積分は一般には厳密に求積することはできない。そこでなんらかの近似を行うことにしよう。最も簡単な近似は、短い時間
こうして、
このオイラー法の精度を調べてみよう。
ここで、
オイラー法は、
さて、オイラー法は、本来は時刻
まず、系を一次のオイラー法で
となる。この地点での微分係数
となる。これは中点法と呼ばれ、二次精度となる。念の為に確認しておこう。
であることに注意すると、
となる。また、中点法は、
その他、これまでの軌跡を覚えておいて、そこから線形補完して場所を予測し、予測点を使って改めて将来の点を修正する、予測子-修正子法も広く使われている。
4.2 Integration of Equations of Motion
4.2.1 Euler method
さて、分子動力学法の運動方程式を考えよう。簡単のために一次元系を考える。ハミルトニアン
この系は
いま、系として調和振動子を考えよう。ハミルトニアンは
さて、運動方程式における初期値問題とは、ある時刻
と求めることができる。なお、煩雑なので
であるから、ハミルトニアンが保存量となる。調和振動子系なら、
つまり、時刻
4.2.2 Velocity Verlet method
さて、調和振動子の運動方程式をオイラー法で数値積分するとエネルギーがあっという間に発散することがわかった。そこで、Runge-Kuttaや予測子-修正子法のような高次の数値積分法を使っても良いのだが、より簡便で、かつ非常に安定な数値積分法が発見された。velocity Verlet (VV)法である。以下の運動方程式を考えよう。
簡単のために一次元系で、質量を1としている。
まず、位置については、二次までテイラー展開する。
ここで、運動方程式では位置の時間微分は速度、速度(運動量)の時間微分は力であるから、それぞれ既知なのがミソである。
速度も二次まで展開したいが、速度の微分は力であり、力の微分まで計算するのは面倒だ。そこで、差分を工夫する。先程、すでに時刻
と表すことができる。これが二次まで正しいテイラー展開になっていることは容易に確認できるであろう。
さて、このようにして構築されたVV法は、位置に関しても運動量に関しても二次まで正しい展開になっているため、二次精度の数値積分法になっていることが予想される。事実、VV法は二次精度なのだが、この時間発展を行うと エネルギーが厳密に保存する。
実際に調和振動子系で確認してみよう。VV法を適用すると
エネルギーの保存を確認すると、
となっている。つまり、
が厳密に保存される。
VV法でエネルギーが保存する理由をもう少し詳しく見てみよう。シミュレーションによる時間発展とは、次の時刻
調和振動子にオイラー法を適用した場合を見てみよう。
これが変数変換であることが見やすいように行列表示してみよう。
ただし、
であるから、この変換が、面積要素を拡大することがわかる。
同様に、VV法の時間発展行列を行列表現すると、
となり、明らかに
4.3 Symplectic Integrator
4.3.1 Matrix Form
VV法が調和振動子の場合にエネルギーを保存するのは、時間発展を記述する行列の行列式が1であることに対応していた。実は、VV法は「Symplectic Integrator」と呼ばれる手法の一種になっており、Symplectic Integratorは指数分解公式から作られる。
ここでは、まずは調和振動子において指数分解公式から時間発展演算子を構築する様子を見てみよう。
運動方程式は行列の形で
と書ける。ここで
つまり、時間微分行列を指数の肩の上に乗せると時間発展行列が得られる。
線形代数の講義でやったように、
となる。つまり、調和振動子の時間発展は回転で表すことができる。しかし、一般に時間発展行列(演算子)は厳密に求めることができないので、なんらかの近似をすることになる。
まず、オイラー法は以下のように近似している。
厳密解と見比べてみて、1次まで正しい近似になっていることがわかるであろう。
さて、VV法はこうなっていた。
VV法による近似は、テイラー展開の二次まで正しい。ただし、三次の項をうまく付け加えることで、この行列の行列式を1にしているのがポイントである。
さて、今回はある行列
いま、行列
一般に
である。しかし、以下の等式が成り立つことが知られている。
これをLie-Trotter公式と言う。この式は
これを指数分解公式と呼ぶ。最初の分解が一次、次が二次の公式である。
さて、ここで
という性質があったとしよう。すると、これらを指数の肩に乗せても二次以降が消えてしまうので、
と、厳密に値を求めることができる。ただし、
調和振動子の時間微分行列(リュービル演算子)は
であった。これを
と分解しよう。明らかに
が成り立つ。さて、まずは一次の指数分解公式
を考えてみよう。これを時刻
である。まずは
つまり、現在の速度
次に、
行列の形からわかるように、これは運動量しか更新しない。以上の時間発展をまとめると、
となり、近似された時間発展行列
となる。
このように
- 最初に
だけオイラー法で更新する - 次に 更新した位置を使って
をオイラー法で更新する
として時間積分を構築すると、オイラー法を適用したつもりが、一次のシンプレクティック積分になる(個人的に「なんちゃってオイラー法」と呼んでいる)。 正しいオイラー法は
- 最初に
だけオイラー法で更新する - 次に 更新する前の位置を使って
をオイラー法で更新する
と、更新前の
さて、指数分解公式がシンプレクティック積分を作る様子を見てみよう。もともと、時間発展行列は、時間微分行列
を満たすことであった。さて、指数分解公式は時間微分行列
さて、行列
という形であったから、
明らかに
と、行列式1になることがわかるであろう。
念の為、一般的に
まず、
また、行列指数関数
以上で
行列の積の行列式は、行列式の積になるから、
以上を行列の言葉でまとめておこう。
- ハミルトンの運動方程式に対応する時間微分行列
は歪エルミート行列となる(これを嫌って、通常は時間微分演算子を として、 をエルミートに取る) - 時間発展行列
は、歪エルミート行列 を指数関数の肩に乗せたものなので、ユニタリ行列になる - ユニタリ行列の行列式は1となる。
- 行列式が1となる行列による変換は、面積要素を保存する。これによりエネルギーが保存する。
- 指数分解公式は、時間微分行列
を冪零行列の和 で表し、時間発展演算子を冪零行列を指数の肩に乗せたもので表現する方法である。 - 冪零行列を指数の肩に乗せると行列式が1となるので、
である。以上からこの積で作られた行列の行列式が1となり、時間発展がシンプレクティックとなる
4.3.2 Liouville Operator
調和振動子の場合は、時間微分演算子、時間発展演算子が行列で書けた。しかし、一般に時刻
一般の時間微分演算子を考える。
ここに現れる演算子
これを見て
という分解を自然に思いつくであろう。さて、いまハミルトニアンが以下の様に、運動量のみに依存する項
ただし、
ここで、
まず
全く同様に、
ここから、この演算子を指数関数の肩に乗せたものを
ここで、
一次のシンプレクティック積分法であれば、
と分解できるので、
を計算すれば良い。これは、
- 最初に現在の速度で時間
だけ等速直線運動をさせて - 次に、更新された座標を使って計算される力が
だけ持続した時の力積により運動量を変化させる
というアルゴリズムになっている。
次に、二次の分解公式を考えよう。これは
と分解する方法だ。対応する数値積分アルゴリズムは
- 最初に現在の力が
だけ持続した時の力積により運動量を変化させ - 次に更新された運動量で時間
だけ等速直線運動をさせ、 - 最後に更新された座標における力が
だけ持続した場合の力積変化を計算する
というアルゴリズムになっている。指数分解公式を使うというと難しく感じるが、要するに座標と運動量を更新する際、どちらかが止まっている(定数である)と思って、片方を更新するのを繰り返しているだけである。
4.3.3. Symplecity of Velocity Verlet Algorithm
では、最後にVV法が二次のシンプレクティック積分になっていることを示そう。自然ハミルトニアン
を考える。簡単のため、質量を
二次のシンプレクティック積分のアルゴリズムは
- 最初に現在の力が
だけ持続した時の力積により運動量を変化させ - 次に更新された運動量で時間
だけ等速直線運動をさせ、 - 最後に更新された座標における力が
だけ持続した場合の力積変化を計算する
となっていた。時刻
まず、現在かかっている力が
次に、更新された運動量で時間
最後に、更新された座標
以上で、
これは、VV法に他ならない。
先程、二次の指数分解公式として
を考えた。この分解を逆にして、
とすると、数値積分法として
- まず
だけ等速直線運動をさせる - 現在の力が
だけ持続したとして運動量を変化させる - 最後に更新された運動量で
だけ等速直線運動をさせる
というステップを繰り返すアルゴリズムが構築できる。このステップを繰り返すと、同じ速度で座標を
だけ等速直線運動をさせる- 現在の力が
だけ持続したとして運動量を変化させる
というステップを繰り返しつつ、もし座標の情報が欲しい場合は時刻を
やっている計算は一次のシンプレクティック積分と変わらないのだが、観測のタイミングが異なると二次になるのが面白い点である。
4.3.4 Shadow Hamiltonian
シンプレクティック積分は、元のハミルトニアンから少しだけずれた「影のハミルトニアン」を厳密に保存する。一般に影のハミルトニアンが存在するか、存在するとして時間刻みに対する収束半径はどれくらいかは知られていないが、系が線形の場合は影のハミルトニアンを厳密に求めることができる。
以下、一次元調和振動子系において影のハミルトニアンを求めてみよう。
運動方程式は以下の通り。
リュービル演算子に対応する時間微分行列は
となる。これを
と分離しよう。時間発展行列
であるが、これを
で近似することを考えよう。
もともと、
という形を仮定しよう(煩雑になるので1/2のファクターは除いてある)。厳密な保存量は
さて、時間発展演算子として、一次の近似、
を考えよう。これにより
影のハミルトニアンが保存することを要請すると、
ここから、
であるから、
となる。ここで、
この
これが一次の指数分解公式で作られたシンプレクティック積分の「影のハミルトニアン」である。もとのハミルトニアンから
二次の場合も同様に計算できる。計算の便利のために、以下の行列を定義する。
ちょっとややこしいが、
であることに注意。
VV法の時間発展演算子は
であるから、
を満たす行列
ここで、
であることを使って、両辺に左から
両辺が等しくなるような
とすれば良い。この時、影のハミルトニアンは
と求まる。
影のハミルトニアンの形
の形を見ると、
実際、調和振動子の場合には収束半径まで含めて影のハミルトニアンが厳密に計算できることが知られている(Kobayasih 2007)。
ここでは、影のハミルトニアンが
[1] H. Kobayashi, Phys. Lett. A, Vol. 371, Issues 5–6, 26 November 2007, Pages 360-362, [doi:10.1016/j.physleta.2007.06.037](https://doi.org/10.1016/j.physleta.2007.06.037}