如何以f(x)编程方式计算典型值的导数以确保最大准确性?
f(x)
我正在实现Newton- Raphson方法,它需要采用函数的导数。
我同意@erikkallen,这(f(x + h) - f(x - h)) / 2 * h是对数值进行数值逼近的常用方法。但是,获得正确的步长h有点微妙。
(f(x + h) - f(x - h)) / 2 * h
(的近似误差f(x + h) - f(x - h)) / 2 * h随着()的减小h而减小,这表示您应h尽可能小。但是,h随着()减小,由于分子需要减去几乎相等的数字,因此浮点减法的误差会增加。如果h太小,则可以放宽在减法中具有很高的精度,因此在实践中,您必须选择一个不太小的值,h以最大程度地减小 近似 误差和 数值 误差的组合。
f(x + h) - f(x - h)) / 2 * h
h
根据经验,您可以尝试h = SQRT(DBL_EPSILON)在哪里DBL_EPSILON使用最小的双精度数,e例如1 + e != 1机器精度。 DBL_EPSILON即将开始,10^-15因此您可以使用h = 10^-7或10^-8。
h = SQRT(DBL_EPSILON)
DBL_EPSILON
e
1 + e != 1
10^-15
h = 10^-7
10^-8
有关更多详细信息,请参见有关选择微分方程步长的这些说明。