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

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

最佳答案

我同意@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是最小的 double 数字e,这样1 + e != 1的机器精度就很高。 DBL_EPSILON10^-15有关,因此您可以使用h = 10^-710^-8

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

关于c++ - 在C/C++中实现派生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1559695/

10-10 17:45