Hayami Kaito
← Apps

物理シミュレーション

ばね・二重振り子・惑星の軌道・三体問題を、オイラー法・シンプレクティック・オイラー法・速度ベルレ法・ルンゲ=クッタ法で同時に動かします。エネルギーのずれのグラフで計算の誤差を比べ、カオスの初期値敏感性も確かめられます。

ばねにつながれた重り(調和振動子 x″ = −x)。厳密解は x = cos t。図は横軸が位置、縦軸が速度の「位相空間」で、正しく解ければ円を描き続けます。上端にはばねと重りを描きます。

積分法(1 つ以上)

刻み幅 Δt

速さ

時刻 t
0.00
周期
0.00 周
ステップ数
0

オイラー法

エネルギーのずれ
0
最大
0

シンプレクティック・オイラー法

エネルギーのずれ
0
最大
0

ルンゲ=クッタ法(4 次)

エネルギーのずれ
0
最大
0

上端の輪郭だけの丸と、位相空間の輪郭だけの点は厳密解(x = cos t, v = −sin t)の位置です。点線は正しい軌道です。

エネルギーのずれの推移

最初のエネルギー E₀ に対するずれの割合 |E − E₀| / |E₀| です。縦軸は対数で、1 目盛りごとに 10 倍になります。

積分法の比べ方

積分法次数加速度の計算 / ステップ今のずれ最大のずれ
オイラー法今の速度と加速度で、位置と速度を同時に進める一番単純な方法。エネルギーが少しずつ増え続けます。1100
シンプレクティック・オイラー法先に速度を進め、その新しい速度で位置を進める方法。手間はオイラー法と同じですが、エネルギーのずれが増え続けず、一定の幅に収まります。1100
速度ベルレ法速度を半歩ずつ 2 回に分けて進める方法(リープフロッグ法と同じ)。2 次の精度で、エネルギーのずれも一定の幅に収まるため、分子動力学やゲームの物理でよく使われます。22——
ルンゲ=クッタ法(4 次)途中の 4 点で傾きを求めて重み付きで平均する方法。1 ステップの手間は 4 倍ですが、誤差がとても小さくなります。ただしエネルギーのずれはごくわずかずつ一方向にたまります。4400

使い方

  • 上で系(ばね・二重振り子・惑星の軌道・三体問題)を選び、比べたい積分法を 1 つ以上選んで「再生」を押します。選んだ積分法ごとに、同じ初期値から同時に計算します。
  • 「刻み幅 Δt」は 1 ステップで進める時間です。大きいほど計算は速く済みますが、誤差が大きくなります。
  • 下のグラフは、最初のエネルギーからのずれの推移です。正しく計算できていればエネルギーは変わらないはずなので、ずれが計算の誤差の目安になります。
  • 二重振り子では「初期値をずらした 7 本を重ねる」を押すと、2 本目の振り子の角度を 0.0001 rad ずつずらした振り子を重ねて動かします。
  • キーボードでは Space で再生 / 一時停止、→ で 1 ステップ進む、R で最初に戻します。

数値積分のしくみ

物体の動きは、位置 x と速度 v の変化を表す微分方程式 dx/dt = v, dv/dt = a(x, v) で決まります。コンピューターでは時間を Δt ごとに区切り、今の状態から Δt 後の状態を少しずつ求めていきます。これが数値積分です。

オイラー法は x ← x + v Δt, v ← v + a Δt と、今の傾きだけで進めます。誤差は Δt に比例する(1 次)ので、Δt を半分にしても誤差は半分にしかなりません。ルンゲ=クッタ法(4 次)は、1 ステップの途中の 4 か所で傾きを求めて平均するため、Δt を半分にすると誤差が約 16 分の 1 になります。

シンプレクティック積分法

シンプレクティック・オイラー法は、オイラー法の「速度を先に更新し、その新しい速度で位置を進める」ように順番を変えただけの方法です。精度は同じ 1 次ですが、位相空間の面積を保つ(シンプレクティックである)ため、エネルギーのずれがたまり続けず、一定の幅を行き来します。そのため、惑星の軌道のように長い時間を計算すると、精度の高いルンゲ=クッタ法よりも軌道の形を長く保てることがあります。

ただしこの性質は、加速度が位置だけで決まる系(ばね・惑星・三体問題)のものです。二重振り子では加速度が速度にも依存するので、このアプリの書き方ではシンプレクティックにならず、エネルギーがずれていきます。

カオス

二重振り子は、初期値のわずかな違いが時間とともに指数関数的に広がるカオス的な系です。計算の誤差も初期値のずれと同じように広がるため、どの積分法でも、ある時刻より先の正確な動きを求めることはできません。それでもエネルギーのずれを見れば、どの方法が物理として正しい範囲を保てているかを比べられます。