假设我有一些功能,我想找到这样。我可能会使用Newton-Raphson方法。但这要求我知道导数函数。的解析表达式可能不可用。例如,可以由查阅实验值数据库的复杂计算机代码段定义。
但即使是复杂的,我可以近似针对任何特定通过选择少数和calculting 。
我听说这种方法有明显的缺点,但我不知道它们是什么。维基百科暗示:“使用这种近似将导致像割线法那样的收敛速度比牛顿法慢的事情。”
有人可以对此进行详细说明,并提供特别讨论该技术问题的参考吗?
假设我有一些功能,我想找到这样。我可能会使用Newton-Raphson方法。但这要求我知道导数函数。的解析表达式可能不可用。例如,可以由查阅实验值数据库的复杂计算机代码段定义。
但即使是复杂的,我可以近似针对任何特定通过选择少数和calculting 。
我听说这种方法有明显的缺点,但我不知道它们是什么。维基百科暗示:“使用这种近似将导致像割线法那样的收敛速度比牛顿法慢的事情。”
有人可以对此进行详细说明,并提供特别讨论该技术问题的参考吗?
Answers:
为了说明起见,让我们假设(即,它是一个向量值函数,将向量作为输入并输出相同大小的向量)。有两个问题:计算成本和数值精度。
计算所述导数(雅可比矩阵,Ĵ (X ),或(∇ ˚F (X ))Ť,或任何你喜欢)使用有限差将需要Ñ功能评估。如果您可以直接从定义中使用浮点算法来计算导数,则必须计算差商
对于每个,假设您不做任何类型的“智能有限差分”(如Curtis-Powell-Reid),因为您知道(或可以检测到)D f的稀疏模式。如果n大,那可能是很多功能评估。如果您有D f的解析表达式,则计算起来可能会更便宜。在某些情况下,也可以使用自动(也称为算法)微分方法来计算D f,其成本大约是功能评估成本的3至5倍。
还有数字方面的问题。显然,在计算机上,我们不能取标量的极限,因为它接近零,所以当我们近似,我们实际上是将ε选为“小”并计算
其中意味着它是一个近似值,我们希望这是一个很好的近似。用浮点算术计算此近似值很困难,因为如果选择ε太大,则近似值可能会很差,但是如果选择ε太小,则可能会产生明显的舍入误差。这些影响在Wikipedia上有关数值微分的文章中进行了详细介绍。在文章中可以找到更多详细的参考资料。
如果误差在雅可比矩阵不太大,则牛顿-拉夫森迭代将收敛。有关详细的理论分析,请参阅Nick Higham撰写的《数值算法的准确性和稳定性》第25章,或FrançoiseTisseur撰写的论文。
图书馆通常会为您处理这些算法细节,通常,牛顿-拉夫森算法(或其变体)的库实现会很好地收敛,但是每隔一段时间,就会有一个问题,由于这些缺陷而引起一些麻烦以上。在标量情况下,由于它的鲁棒性和实践中的良好收敛速度,我将使用Brent方法。