0

我正在尝试用牛顿法解决一些非线性系统,解决方案的准确性对我的问题非常重要。

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

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

4

2 回答 2

2

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

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

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

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

于 2013-12-13T11:10:35.027 回答
0

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

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

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

于 2013-12-03T02:23:16.467 回答