deriv API
deriv 包根据调用者给出的初始步长 h 估计函数在某一点处的导数。每个函数都会同时返回估计值和误差界。
deriv_central : (f: Func_Math, x: Double, h: Double) -> (Double, Double)
描述:
使用自适应中心差分法计算函数 f 在点 x 处的导数,通过平衡截断误差和舍入误差提高精度。
参数:
f: Func_Math— 输入Double类型值并返回Double的数学函数。x: Double— 求导点的位置。h: Double— 数值微分的初始步长,必要时会自动调整。
返回值:
元组 (Double, Double),其中:
- 第一个值为
x处的导数估计值。 - 第二个值为总估计误差(包含截断误差和舍入误差)。
示例:
test "deriv_central" {
let f = fn(x : Double) { x * x } // f(x) = x², f'(x) = 2x
let (deriv, error) = deriv_central(f, 2.0, 0.1)
inspect((deriv - 4.0).abs() < error, content="true")
}
注意事项:
- 方法自动调整步长以优化精度。
- 对平滑函数效果良好,但在不连续点附近精度可能下降。
- 相比简单的两点法,此方法显著降低了数值误差。
deriv_forward : (f: Func_Math, x: Double, h: Double) -> (Double, Double)
描述:
使用自适应前向差分法计算函数 f 在点 x 处的导数,通过优化步长最小化截断和舍入误差。
参数:
f: Func_Math— 输入Double类型值并返回Double的数学函数。x: Double— 求导点的位置。h: Double— 数值微分的初始步长,必要时会自动调整。
返回值:
元组 (Double, Double),其中:
- 第一个值为
x处的导数估计值。 - 第二个值为总估计误差(包含截断误差和舍入误差)。
示例:
test "deriv_forward" {
let f = fn(x : Double) { x * x } // f(x) = x², f'(x) = 2x
let (deriv, error) = deriv_forward(f, 2.0, 0.1)
inspect((deriv - 4.0).abs() < error, content="true")
}
注意事项:
- 方法自动优化步长以提高精度。
- 相比基础前向差分法,此方法显著减少数值误差。
- 对平滑函数效果良好,但对于存在剧烈变化或不连续点的函数精度可能下降。
- 适用于边界点求导(此时中心差分法不可用)。
deriv_backward : (f: Func_Math, x: Double, h: Double) -> (Double, Double)
描述:
使用自适应后向差分法计算函数 f 在点 x 处的导数,原理与前向差分法相同但步长为负。
参数:
f: Func_Math— 输入Double类型值并返回Double的数学函数。x: Double— 求导点的位置。h: Double— 数值微分的初始步长,必要时会自动调整。
返回值:
元组 (Double, Double):
- 第一个值为
x处的导数估计值。 - 第二个值为总估计误差(包含截断误差和舍入误差)。
示例:
test "deriv_backward" {
let f = fn(x : Double) { x * x } // f(x) = x², f'(x) = 2x
let (deriv, error) = deriv_backward(f, 2.0, 0.1)
inspect((deriv - 4.0).abs() < error, content="true")
}
注意事项:
- 方法自动优化步长以提高精度。
- 适用于数据集的上边界附近求导。
- 与
deriv_forward具有相同的数值优势,相比简单有限差分显著降低数值误差。