らんだむな記憶

blogというものを体験してみようか!的なー

オイラー法とホイン法

理論は知らんが、Euler's methodでは離散化したステップサイズ$\Delta t$に対し、最終的に誤差GTEが$\mathrm{const.} \times \Delta t$で積もるようだ。
これを改善したホイン法(Heun's method)がLesson2で扱われる。これはGTEが$\mathrm{const.} \times (\Delta t)^2$になるらしい。その理論的詳細は講座のスコープ外のようだが...。
何故Heun's methodが優れているかの理論的な解説そのものも言及されているようには感じないが、ベクトル場を脳裏に浮かべつつ、Euler's methodで暫定的に求めたちょっと先の速度と加速度の塩梅がどんなであるかを見て、それと現在の接ベクトルとを折衷させて補正した方向ベクトルを作り出しているので、まぁ直観的にはより良い値が出そうだなぁとは思う。

十分に小さな$\Delta t$を考える時、ステップサイズ半分にしてもEuler's methodならGTEが1/2にしかならないが、Heun's methodでは1/4になるとこがおいしい。

GTEに対し、各ステップごとの誤差はLTE(Local Truncation Error)と呼ばれるらしい。どうもモバイル端末の通信を想起してしまう。

Euler's methodでのLTE$\mathrm{const.} \times (\Delta t)^2$らしい。時間$T$の間の軌道上の運動を数値解析で求めるとして、$n$分割したステップサイズを$\Delta t = T / n$として、$\sum_{j = 1}^n \mathrm{const.} \times (T / n)^2 \approx n \times T^2 / n^2 \approx T \times (T / n) \approx \Delta t$でGTEと辻褄合うだろ?ってな程度の説明。
ここで$\approx$のとこは定数倍くらいは全部無視してオーダーだけ見てる。某理論物理の大家も「若い人は係数とか結構気にする人がいるけど、本質を見るだけならこれくらい大雑把でもいいんですよ」みたいなことを言っていたしOKだろう。
大学の勉強なんて基本授業はあまり役に立たなくて、環境を最大限利用して自分で勉強するのが一番ためになるような気はする一方で、一流の大学には一流の先生がいて、その授業はまぁつまらないとしても、途中で茶を啜りながらぽそっと呟かれる一流の呟きや至言がたまに聴けて、それが衝撃的であることがある。ノートをとるだけなら正直、ある程度以上の大学ならどこでもいーかもしれないけど、ノートには現れないそういう脇道の宝に遭遇できるのが一流大学に行くメリットの一つかもしれない。

閑話休題。$x_E,\ x_H$をそれぞれEuler's methodとHeun's methodによる位置、$v_E,\ v_H$をそれぞれEuler's methodとHeun's methodによる速度として$$\mathrm{LTE}_E := |x_E - x_H| + T |v_E - v_H|$$
なる量を考える。物理的な次元を距離の次元に統一するために、右辺第2項には時間の定数がかけられている。Heun's methodによる数値計算は概ね真の解に近いと思うと、上記はEuler's methodでの誤差を表していると考えることができる。真のEuler's methodでのLTEは一般には分からないけど、Heun's methodを併用して大体の値が計算できるということだ。

Euler's methodでの$\mathrm{LTE}$をある一定のズレ値(torelance)くらいに抑えたいなぁと思う場合に、これはステップサイズを動的に機械的に変化させることで(adaptive step size)できるよってなお話も。ある時点でステップサイズを$\Delta t_{\mathrm{old}}$であるとし、次のステップサイズ$\Delta t_{\mathrm{new}}$による$\mathrm{LTE}$をtorelance程度にしたいとする。Euler's methodによる$\mathrm{LTE}$$\mathrm{LTE}_E$が十分に近いと思うと、$\mathrm{LTE}_E \approx \mathrm{const.} \times (\mathrm{step\ size})^2$となる。
よって、次のステップの$\mathrm{LTE}$をtorelance程度ということを式で表現して
\begin{equation}
C \cdot (\Delta t_{\mathrm{new}})^2 \approx \mathrm{tolerance}
\end{equation}
一方、今の時点のEuler's methodでの$\mathrm{LTE}$
$$\mathrm{LTE} = C \cdot (\Delta t_{\mathrm{old}})^2 \approx \mathrm{LTE}_E$$
程度なので、両方の式から定数を消去して、
$$\Delta t_{\mathrm{new}} = \Delta t_{\mathrm{old}} \sqrt{ \frac{\mathrm{tolerance}}{\mathrm{LTE}_E} }$$
となって、これは計算可能である。
こうやってステップサイズを動的に変えていくのをadaptive step sizeと呼んでいるようだ。これを適用すると、Euler's methodとHeun's methodでの乖離をtoleranceによってコントロールできるって感じかな。