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")
}

注意事项:

  • 方法使用三个后向点自适应计算导数。
  • 应用 Neville 递归法计算差分并估计误差。
  • 该方法包含基于二阶差商的误差估计。
  • 步长 h 过大可能降低精度,过小可能导致数值精度问题。

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

描述:

使用自适应步长的前向差分法计算函数在给定点的数值导数。

参数:

  • f: Func_Math — 输入 Double 类型值并返回 Double 的数学函数。
  • x: Double — 求导点的位置。

返回值:

元组 (Double, Double),其中:

  • 第一个值为前向差分导数估计值。
  • 第二个值为计算的绝对误差估计值。

注意事项:

  • 该函数在三个前向点上对给定函数求值以确定步长,因此只需要 f 在 x 及其右侧的取值。

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 附近的四个点上对给定函数求值以确定步长。