diff API

diff パッケージは、呼び出し側からステップサイズを受け取らずに、ある点における関数の微分係数を推定します。ステップは機械精度と関数の局所的な振る舞いから決まります。各関数は推定値と誤差の上限を合わせて返します。

diff_backward : (f : Func_Math, x : Double) -> (Double, Double)

説明:

適応ステップサイズを使用して、与えられた点における関数の数値微分係数を後退差分法を使用して計算します。

パラメーター:

  • f: Func_Math — Doubleを入力とし、Doubleを出力とする関数。微分対象の関数。
  • x: Double — 微分係数を計算する点。

戻り値:

タプル(Double, Double)で、以下の内容を返します:

  • 第一値は後退差分近似を使用した推定微分係数値。
  • 第二値は計算の推定絶対誤差。

例:

test "diff_backward" {
  let f = fn(x : Double) { x * x } // f(x) = x^2, f'(x) = 2x
  let (derivative, error) = diff_backward(f, 2.0)
  inspect((derivative - 4.0).abs() < error, content="true")
}

メモ:

  • この関数は、適応ステップサイズを使用して3つの後方差分点で与えられた関数を評価します。
  • 商差を計算し、微分係数の推定にネビルの再帰法を適用します。
  • 方法には、2階商差に基づく誤差推定が含まれています。
  • hが大きすぎると精度が低下する可能性があり、小さすぎると数値精度の問題が発生する可能性があります。

diff_forward : (f : Func_Math, x : Double) -> (Double, Double)

説明:

適応ステップサイズを使用して、与えられた点における関数の数値微分係数を前進差分法で計算します。

パラメーター:

  • f: Func_Math — Doubleを入力とし、Doubleを出力とする関数。微分対象の関数。
  • x: Double — 微分係数を計算する点。

戻り値:

タプル(Double, Double)で、以下の内容を返します:

  • 第一値は前進差分近似を使用した推定微分係数値。
  • 第二値は計算の推定絶対誤差。

メモ:

  • この関数はステップサイズを決めるために3つの前方の点で与えられた関数を評価するので、x 以上の点における f の値だけを必要とします。

diff_central : (f : Func_Math, x : Double) -> (Double, Double)

説明:

適応ステップサイズを使用して、与えられた点における関数の数値微分係数を中心差分法で計算します。

パラメーター:

  • f: Func_Math — Doubleを入力とし、Doubleを出力とする関数。微分対象の関数。
  • x: Double — 微分係数を計算する点。

戻り値:

タプル(Double, Double)で、以下の内容を返します:

  • 第一値は中心差分近似を使用した推定微分係数値。
  • 第二値は計算の推定絶対誤差。

例:

test "diff_central" {
  let f = fn(x : Double) { x * x } // f(x) = x^2, f'(x) = 2x
  let (derivative, error) = diff_central(f, 2.0)
  inspect((derivative - 4.0).abs() < error, content="true")
}

メモ:

  • この関数はステップサイズを決めるために x の周りの4つの点で与えられた関数を評価します。