【问题标题】:How to determine the Jacobian when solving a nonlinear system by Newton-Raphson method用 Newton-Raphson 方法求解非线性系统时如何确定雅可比行列式
【发布时间】:2013-11-12 08:50:53
【问题描述】:

我正在尝试用牛顿法求解一些非线性系统,求解精度对我的问题非常重要。

  1. 在不使用符号计算软件的情况下,如何通过 C++ 或其他类似编程语言计算一般非线性多项式系统的雅可比?对我来说困难主要是:

    • 与符号雅可比一样准确
    • 一种适用于一般非线性系统情况的算法
    • 仅依赖于 C++ 或类似的编程语言;
  2. 如果我必须使用有限差分法来获得近似雅可比行列式,那么所选择的步长将如何影响最终解的精度?如何确定步长,以便在相同的计算精度水平下获得最佳的求解精度?如何(定量)确定近似雅可比对最终解精度的影响?

【问题讨论】:

    标签: floating-accuracy nonlinear-functions newtons-method


    【解决方案1】:

    查看对偶数的想法,C++ 中有几个示例实现。使用适当初始化的对偶数评估函数会导致评估一个方向导数。对所有坐标方向重复此操作。

    有关精彩介绍,请参阅 Piponi:AD、C++ 和摄影测量 (http://el.mdu.edu.tw/datacos/09820722022O/paper.pdf)

    如果 L 是评估函数的努力,则一个方向导数的成本约为 3*L,完整的 jacobian 成本为 3n*L。如果要在一次评估中组合所有方向,则这将简化为 (1+2n)*L。但是到那时我们已经进入了自动或算法微分的领域。

    寻找 FADBAD/TADIFF 以便于实现,对于真正快速的代码,需要使用 Tapenade 项目提供的代码转换。 ADOL-C 介于两者之间,比 Tapenade 更自动化,比 FADBAD 更快。

    【讨论】:

      【解决方案2】:

      我通过使用雅可比的有限差分逼近自己解决了这个问题;

      通过符号雅可比行列式或有限差分雅可比行列式求解非线性系统时,无论是效率还是准确度,似乎基本上没有区别。

      唯一的区别是:符号雅可比行列式需要更少的步骤来达到所需的收敛;如果能提供雅可比行列式,那就更快了。

      【讨论】:

      • 还有其他优点。使用盲有限差分方案可能很难利用稀疏性(例如许多浪费的函数评估),而如果符号雅可比行列式可用,那么它显然会直接暴露稀疏性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 2014-01-30
      • 2017-07-11
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多