具有近似数值导数的Newton-Raphson近似的缺点


17

假设我有一些功能f,我想找到x这样f(x)0。我可能会使用Newton-Raphson方法。但这要求我知道导数函数f(x)的解析表达式f可能不可用。例如,f可以由查阅实验值数据库的复杂计算机代码段定义。

但即使f是复杂的,我可以近似f(a)针对任何特定a通过选择少数ϵ和calculting f(a)f(a+ϵ)f(a)ϵ

我听说这种方法有明显的缺点,但我不知道它们是什么。维基百科暗示:“使用这种近似将导致像割线法那样的收敛速度比牛顿法慢的事情。”

有人可以对此进行详细说明,并提供特别讨论该技术问题的参考吗?


5
当微分的计算成本很高时,割线方法是一种很好的选择。三步割线通常大致相当于两步牛顿,并且步便宜。

1
每当您通过有限差分数值计算导数时(如您所建议),函数中的任何噪声都会放大,因此您必须谨慎选择epsilon。一种可能性是,当您接近解决方案时,切换到二进制细分方法,只要f是局部单调的,就可以保证收敛。
Mike Dunlavey 2012年

2
正如安德烈(André)所提到的,正如您所建议的那样,两点数值导数等效于重新开始的Secant方法。不过,为了更快地收敛,我建议使用所谓的Illinois算法,它是Secant方法的近亲,每步将只使用一个点,而不是您的情况下的两个点,并且不会像错误的位置方法。
Pedro 2012年

的维数是多少?尺寸越高,衍生品就越有价值。不使用雅可比行列式的Newton-Krylov是不需要显式导数的选项(尽管预处理对于病态系统很重要)。x
杰德·布朗

Answers:


12

为了说明起见,让我们假设(即,它是一个向量值函数,将向量作为输入并输出相同大小的向量)。有两个问题:计算成本和数值精度。f:RnRn

计算所述导数(雅可比矩阵,Ĵ X ,或˚F X Ť,或任何你喜欢)使用有限差将需要Ñ功能评估。如果您可以直接从定义中使用浮点算法来计算导数,则必须计算差商Df(x)J(x)(f(x))Tn

Df(x)ei=limε0f(x+εei)f(x)ε

对于每个,假设您不做任何类型的“智能有限差分”(如Curtis-Powell-Reid),因为您知道(或可以检测到)D f的稀疏模式。如果n大,那可能是很多功能评估。如果您有D f的解析表达式,则计算起来可能会更便宜。在某些情况下,也可以使用自动(也称为算法)微分方法来计算D f,其成本大约是功能评估成本的3至5倍。i=1,,nDfnDfDf

还有数字方面的问题。显然,在计算机上,我们不能取标量的极限,因为它接近零,所以当我们近似,我们实际上是将ε选为“小”并计算Dfε

Df(x)eif(x+εei)f(x)ε,

其中意味着它是一个近似值,我们希望这是一个很好的近似。用浮点算术计算此近似值很困难,因为如果选择ε太大,则近似值可能会很差,但是如果选择ε太小,则可能会产生明显的舍入误差。这些影响在Wikipedia上有关数值微分的文章中进行了详细介绍。在文章中可以找到更多详细的参考资料。εε

如果误差在雅可比矩阵不太大,则牛顿-拉夫森迭代将收敛。有关详细的理论分析,请参阅Nick Higham撰写的《数值算法准确性和稳定性》第25章,或FrançoiseTisseur撰写的论文Df

图书馆通常会为您处理这些算法细节,通常,牛顿-拉夫森算法(或其变体)的库实现会很好地收敛,但是每隔一段时间,就会有一个问题,由于这些缺陷而引起一些麻烦以上。在标量情况下,由于它的鲁棒性和实践中的良好收敛速度,我将使用Brent方法(n=1)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.