diffeq_heun プログラム仕様

cms.diffeq_heun.diffeq_heun(force, t0, x0, dt)[ソース]

Heun法(修正オイラー法)を用いて、次の時刻の状態変数を計算する。

Heun法は、オイラー法よりも精度の高い常微分方程式の数値解法である。 現在の点での勾配と、オイラー法で予測された次の点での勾配の平均を用いて、次のステップを計算する。

  1. 現在の状態 (t0, x0) からオイラー法で次のステップを予測 (k0)。

  2. 予測された次のステップ (t0+dt, x0+k0) を用いて勾配 k1 を計算。

  3. k0k1 の平均値を使用して、より正確な次の状態 x1 を計算する。

パラメータ:
  • force -- callable: dx/dt = force(t, x) の形式で定義される微分方程式の右辺関数。 第一引数に時刻 t、第二引数に状態変数 x をとる。

  • t0 -- float: 現在の時刻。

  • x0 -- float: 現在の状態変数。

  • dt -- float: 時間ステップ幅。

戻り値:

float: 次の時刻 t0 + dt における状態変数 x1 の値。

cms.diffeq_heun.force(t, x)[ソース]

積分対象となる関数 dx/dt = f(t, x) を定義する。

この関数は f(t, x) = -x*x を返す。これは例として使用される特定の微分方程式の右辺である。

パラメータ:
  • t -- float: 現在の時刻。

  • x -- float: 現在の状態変数。

戻り値:

float: dx/dt の値。

cms.diffeq_heun.fsolution(t)[ソース]

定義された微分方程式の厳密解を計算する。

初期条件 x(0) = 1.0 の場合、厳密解は x(t) = 1 / (1 + t) で与えられる。 この関数は、数値計算の結果と比較するための基準値を提供する。

パラメータ:

t -- float: 時刻。

戻り値:

float: 時刻 t における厳密解 x の値。

cms.diffeq_heun.main(x0, dt, nt)[ソース]

メインルーチンとして、Heun法による微分方程式の数値計算を実行し、結果を出力する。

指定された初期条件、時間ステップ、計算ステップ数に基づき、diffeq_heun 関数を繰り返し呼び出して数値解を求める。 計算された数値解と厳密解を比較し、指定された間隔 (iprint_interval) でコンソールに出力する。

パラメータ:
  • x0 -- float: 微分方程式の初期状態変数 x(0) の値。

  • dt -- float: 時間ステップ幅。

  • nt -- int: 総計算ステップ数。

戻り値:

None