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