k_runge

    刻み幅自動調節アルゴリズムを実装したRunge-Kutta法を用いて,連立1階常微分方程式の初期値問題:
    \begin{align} &\frac{d\boldsymbol{y}}{dx} = \boldsymbol{f}(x,\boldsymbol{y})\\ &\boldsymbol{y}(x_0) = \boldsymbol{y}_0 \end{align} を解くための倍精度サブルーチン.
     
     
  • サブルーチン名: k_runge

  •  
  • 呼び出し方:call k_runge(neq, fsub, x0, xn, y0, eps, yn, ierr, work)

  •  
  • 引 数:
  • 引数
    意 味
    入出力の区分
    備 考
    neq ベクトル\(\boldsymbol{y}\)とベクトル値関数\(\boldsymbol{f}(x,\boldsymbol{y})\)の次元.
    入力
    整数型.ndim ≥ 1を満足するように選ぶ.
    fsub ベクトル値関数\(\boldsymbol{f}(x,\boldsymbol{y})\)を計算する副プログラムのサブルーチン名
    入力
    倍精度実数型
    x0, xn \(x =\) x0 で初期条件を与えて \(x =\) xn における解を求める.
    入力
    倍精度実数型
    y0(neq) \(x =\) x0におけるベクトル \(\boldsymbol{y}\) の値(初期条件)\(\boldsymbol{y}_0\) を格納した配列.
    入力
    倍精度実数型
    eps 数値解 yn(neq) に対する許容絶対誤差.
    入力
    倍精度実数型
    yn(neq) \(x =\) xn における解 \(\boldsymbol{y}(x)\) を格納する1次元配列.
    出力
    倍精度実数型
    ierr エラーコード.収束解が得られたとき,ierr = 0,それ以外の場合は,ierr = 1.
    出力
    整数型
    work(neq, 12) 作業配列
    作業配列
    倍精度実数型

  • 注 意
    1. ベクトル値関数 \(\boldsymbol{f}(x,\boldsymbol{y})\) を計算するサブルーチン fsub は次の形をしている必要がある.
      subroutine fsub(neq, x, y, rv)
      但し,サブルーチン名は必ずしもfsubである必要はないが,4つの引数の意味は次の通りである.
    2. 引数
      意 味
      入出力の区分
      備 考
      neq ベクトル \(\boldsymbol{y}\) とベクトル値関数 \(\boldsymbol{f}(x,\boldsymbol{y})\) の次元. 入力 整数型
      x 常微分方程式の独立変数. 入力 倍精度実数型
      y(neq) ベクトル \(\boldsymbol{y}\) を格納する配列. 入力 倍精度実数型
      rv(neq) ベクトル値関数 \(\boldsymbol{f}(x,\boldsymbol{y})\) の値を格納する配列. 出力 倍精度実数型

    3. サブルーチンk_rungeを呼び出す際には,fsubが外部手続きであることを示すために,external宣言をしなければならない.
      (例)
      …
      external::fsub
      …
      …
      call k_runge(neq, fsub, x0, xn, y0, eps, yn, ierr, work)
      …
      …