一尘不染

在C / C ++中实现派生

algorithm

如何以f(x)编程方式计算典型值的导数以确保最大准确性?

我正在实现Newton-
Raphson
方法,它需要采用函数的导数。


阅读 222

收藏
2020-07-28

共1个答案

一尘不染

我同意@erikkallen,这(f(x + h) - f(x - h)) / 2 * h是对数值进行数值逼近的常用方法。但是,获得正确的步长h有点微妙。

(的近似误差f(x + h) - f(x - h)) / 2 * h随着()的减小h而减小,这表示您应h尽可能小。但是,h随着()减小,由于分子需要减去几乎相等的数字,因此浮点减法的误差会增加。如果h太小,则可以放宽在减法中具有很高的精度,因此在实践中,您必须选择一个不太小的值,h以最大程度地减小
近似 误差和 数值 误差的组合。

根据经验,您可以尝试h = SQRT(DBL_EPSILON)在哪里DBL_EPSILON使用最小的双精度数,e例如1 + e != 1机器精度。 DBL_EPSILON即将开始,10^-15因此您可以使用h = 10^-710^-8

有关更多详细信息,请参见有关选择微分方程步长的这些说明

2020-07-28